Menu

Friday, November 29, 2019

[Laravel - AWS] วิธีการเก็บ Cache Credentials สำหรับ AWS SDK ของ PHP
[Laravel - AWS] How to Cache Credentials for the AWS SDK for PHP

Credentials จะถูกเรียกใช้ทุกครั้งที่มีการส่ง request ไปยัง Amazon Web Services

มีหลายวิธีที่จะตั้งค่า Credentials นี้ สามารถอ่านได้ที่ Credentials for the AWS SDK for PHP Version 3

ถ้า Application ของเรารันบนเครื่อง Amazon EC2 วิธีการที่แนะนำ คือ การใช้ IAM role เพื่อดึง Credentials แบบชั่วคราวมาใช้งาน

สำหรับการใช้งาน IAM roles, metadata service จะถูกเรียกถูกครั้งที่เรียกใช้ Credentials

หมายเหตุ การเรียกใช้ metadata service คือ การส่ง request ไปที่ metadata server ใน เครื่อง EC2 ซึ่งอาจจะมี network latency ได้

Thursday, November 28, 2019

[Laravel - Model] การตั้งค่า Attribute ของ Model ให้เป็น Lower Case
[Laravel - Model] How to Set Model Attribute to Lower Case

บางครั้งเราจำเป็นต้องทำระบบที่เชื่อมต่อกับฐานข้อมูลเดิมที่มีอยู่แล้ว และฐานข้อมูลเหล่านั้นอาจจะมีชื่อ column เป็นตัวพิมพ์ใหญ่ทั้งหมด เวลาใช้งานแต่ละ column จะต้องพิมพ์ชื่อเป็นตัวพิมพ์ใหญ่ ทำให้ยากต่อการเขียนโค้ด

สำหรับ Laravel แล้ว เราสามารถตั้งค่าเพื่อให้เปลี่ยนชื่อ column พวกนี้เป็นตัวพิมพ์เล็ก เมื่อเราเรียกใช้งานได้

วิธีการตั้งค่า

  1. เข้าไปที่ config/database.php
  2. เพิ่มโค้ดข้างล่างในส่วนของ connections ที่ต้องการ
  3. 'options' => extension_loaded('pdo_mysql') ? array_filter([
        PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        PDO::ATTR_CASE => PDO::CASE_LOWER,
    ]) : [
        PDO::ATTR_CASE => PDO::CASE_LOWER,
    ],
    

Wednesday, November 27, 2019

[Laravel - Model] การเข้ารหัสและถอดรหัสค่าของฟิลด์ใน Laravel Model
[Laravel - Model] Field Values Encryption and Decryption in Laravel Model

ในบางกรณี เราต้องการรักษาความลับของข้อมูล โดยอนุญาตให้เฉพาะผู้ที่เกี่ยวข้องเท่านั้นที่สามารถดูและแก้ไขได้ ระบบส่วนใหญ่จึงจำกัดสิทธิ์การใช้งานของแต่ละผู้ใช้งานภายใน application

อย่างไรก็ตาม ระบบดังกล่าวยังคงเก็บข้อมูลจริงลงฐานข้อมูลโดยไม่มีการเข้ารหัสใดๆ ทำให้ Database Admin ยังสามารถเข้าดูข้อมูลและแก้ไขได้

การเข้ารหัสข้อมูลก่อนเก็บลงฐานข้อมูล จึงเป็นการเพิ่มความปลอดภัยของข้อมูลอีกขั้นนึง

สำหรับ Laravel Model ที่มี function กลางสำหรับการดึงค่าข้อมูลและเก็บข้อมูลของ Fields ต่างๆ ทำให้การเข้ารหัสและถอดรหัสนั้นทำได้ง่ายขึ้นมาก เราเพียงเขียน Trait แล้วนำไปใส่ใน Model พร้อมกับกำหนด Fields ที่เราต้องการเข้ารหัสเท่านั้น

[Laravel - Package] ขั้นตอนการตั้งค่า Packagist เพื่อให้ติดตั้ง Laravel Package ผ่าน Composer ได้
[Laravel - Package] Packagist Setting Steps for Laravel Package Installation via Composer

สมมติว่า เรามี Laravel package อยู่บน Repository ใดๆ แล้วเราต้องการให้สามารถติดตั้ง package ดังกล่าวผ่าน composer ได้เลย โดยไม่ต้องตั้งค่าใดๆเพิ่ม เรามีวิธีการดังต่อไปนี้

เนื่องจาก Composer ใช้งาน Packagist repository เป็น default repository เท่านั้น (อ่านเพิ่มเติมได้ใน Composer Repositories) ขั้นตอนการตั้งค่าจึงเป็นดังนี้
  1. Login เข้า https://packagist.org/
  2. เข้าหน้าเมนู Submit
  3. ใส่ repository url กดปุ่ม Check
  4. กดปุ่ม Submit
  5. รอจน package ถูกอัพเดตเรียบร้อย
สำหรับการทดสอบ ทำได้โดยรัน command ดังนี้
composer require arzeroid/laravel-model-encryptable
ผลที่ได้จะเป็นดังนี้

[Laravel - Package] วิธีการตั้งค่า Composer เพื่อติดตั้ง Package จาก GitHub
[Laravel] How to Install Package from GitHub via Composer

สมมติว่า เรามี Laravel package ตัวนึงอยู่บน GitHub ของเราตามรูปตัวอย่างข้างล่าง


เมื่อเราต้องการนำ package นั้นมาใช้งานใน project ของเรา โดยปกติแล้ว เราจะรัน command ดังนี้
composer require arzeroid/laravel-model-encryptable

Monday, November 25, 2019

[Laravel - Package] วิธีการติดตั้งและตั้งค่า Laravel Userstamps
[Laravel - Package] How to Install and Config Laravel Userstamps

Laravel-Userstamps เป็น package สำหรับจัดการฟิลด์ created_by และ updated_by (รวมถึง deleted_by กรณีที่เปิดใช้งาน Soft Delete) ของ Laravel model โดยใช้ข้อมูลของผู้ใช้งานในขณะนั้น โดยอัตโนมัติ เมื่อมีการสร้าง แก้ไข และลบ model

วิธีการติดตั้ง

  1. สั่งติดตั้ง Laravel-Userstamps package
  2. composer require wildside/userstamps

Friday, November 22, 2019

[Laravel - Package] วิธีการติดตั้งและตั้งค่า Laravel Sluggable
[Laravel - Package] How to Install and Config Laravel Sluggable

Eloquent-Sluggable เป็น package เสริมสำหรับสร้าง Slug ภายใน Laravel Model โดยจะสร้าง Slug ใส่ฟิลด์ที่ระบุให้โดยอัตโนมัติ เมื่อมีการบันทึกข้อมูล

วิธีการติดตั้ง

  1. สั่งติดตั้ง Eloquent-Sluggable package
  2. composer require cviebrock/eloquent-sluggable
  3. สร้างไฟล์ config ของ package ใน project
  4. php artisan vendor:publish --provider="Cviebrock\EloquentSluggable\ServiceProvider"
    

[Laravel - Package] วิธีการติดตั้งและตั้งค่า Laravel Activity Log
[Laravel - Package] How to Install and Config Laravel Activity Log

laravel-activitylog เป็น package สำหรับใช้จัดเก็บ log การใช้งานของ user ยิ่งไปกว่านั้น package นี้สามารถเก็บ log จาก model event ได้โดยอัตโนมัติ

วิธีการติดตั้ง

  1. สั่งติดตั้ง laravel-activitylog package
  2. composer require spatie/laravel-activitylog
  3. สร้างไฟล์ migration ของ package ใน project
  4. php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="migrations"
    
  5. รัน migrate เพื่อสร้างตารางในฐานข้อมูล
  6. php artisan migrate
    
  7. สร้างไฟล์ config ของ package ใน project
  8. php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="config"
    

Thursday, November 21, 2019

[Laravel - Package] วิธีการติดตั้งและตั้งค่า Laravel Permission
[Laravel - Package] How to Install and Config Laravel Permission

laravel-permission เป็น package สำหรับจัดการ roles และ permissions ของ user ใน database

วิธีการติดตั้ง

  1. สั่งติดตั้ง laravel-permission package
  2. composer require spatie/laravel-permission
  3. สร้างไฟล์ migration ของ package ใน project
  4. php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
    
  5. รัน migrate เพื่อสร้างตารางในฐานข้อมูล
  6. php artisan migrate
    
  7. สร้างไฟล์ config ของ package ใน project
  8. php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"
    

Wednesday, November 20, 2019

[Laravel - Package] การสร้าง PHPDOC สำหรับ Laravel Model
[Laravel - Package] How to Generate PHP Document for Laravel Model

เราสามารถสร้าง PHPDOC ของ Laravel Model ได้ง่ายๆ ดังนี้
  1. ติดตั้ง Package Laravel IDE Helper เข้าไปใน Project โดยรันคำสั่งต่อไปนี้
    composer require --dev barryvdh/laravel-ide-helper
    
  2. รันคำสั่งต่อไปนี้ เพื่อสร้าง PHPDOC ของ Laravel Model 
    php artisan ide-helper:models -R
    

Monday, November 18, 2019

[VSCODE] วิธีการย่อโค้ดในไฟล์โดยอัตโนมัติใน Visual Studio Code
[VSCODE] How to Automatically Fold Code Files in Visual Studio Code

หลายๆครั้งที่เราเขียนโค้ด โดยที่ในหนึ่งไฟล์จำเป็นต้องมี Function จำนวนมาก เมื่อเราต้องการแก้ไขหรือเรียกใช้ฟังก์ชั่นใดฟังก์ชั่นหนึ่ง เราจำเป็นต้องเลื่อนหน้าจอขึ้นลงหลายครั้ง เพื่อหาโค้ดตำแหน่งที่เราต้องการ

การย่อฟังก์ชั่นเป็นวิธีนึงที่จะช่วยลดเวลาในเลื่อนหาโค้ดได้ แต่เนื่องจากมี Function จำนวนมาก การย่อฟังก์ชั่นทีละฟังก์ชั่นนั้นใช้เวลามาก

ดังนั้นเราจะใช้วิธีการย่อฟังก์ชั่นโดยอัตโนมัติ โดยใช้ extension ชื่อ Auto Fold ซึ่ง extension ตัวนี้จะย่อ Function และส่วนต่างๆของโค้ดให้เราโดยอัตโนมัติ เมื่อเราเปิดไฟล์

Tuesday, November 12, 2019

[PHP] วิธีการสร้าง Slug จากข้อความที่กำหนด
[PHP] How to Slugify a String

Slug เป็น Identifier ประเภทหนึ่งที่ใช้อ้างอิงถึงข้อมูลเช่นเดียวกับ id ใน database แตกต่างกันตรงที่ Slug เป็น identifier ที่คนสามารถอ่านเข้าใจ

โค้ดสำหรับสร้าง Slug จากข้อความที่กำหนดเป็นดังนี้
public static function slugify($str, $delimiter = '-')
{
    // Replace none alphanumeric with delimiter
    $str = preg_replace('/[^A-Za-z0-9]+/', $delimiter, $str);

    // Replace duplicated delimiter
    $str = preg_replace("/$delimiter+/", $delimiter, $str);

    // Trim delimiter
    $str = trim($str, $delimiter);

    // Convert to lower case
    $str = strtolower($str);

    return $str;
}

Tuesday, November 5, 2019

[Docker] วิธีการแก้ไขข้อผิดพลาด "SSL error: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version"
[Docker] How to Fix "SSL error: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version"

หลังจากที่รันคำสั่งของ laradock ดังต่อไปนี้ผ่าน Docker Toolbox on Windows
docker-compose up -d nginx workspace mysql phpmyadmin 
จะได้ข้อผิดพลาดตามด้านล่างนี้
ERROR: SSL error: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:661)
วิธีแก้ไข คือ ให้รันคำสั่งตามข้างนี้ก่อน แล้วจึงรันคำสั่งข้างต้นอีกที
export COMPOSE_TLS_VERSION=TLSv1_2
กรณีที่ต้องการตั้งค่าถาวรให้เพิ่มคำสั่งข้างบนในไฟล์ ~/.bash_proflle