การใช้ Composer: ติดตั้ง Dependencies
ในบทเรียนที่แล้ว เราได้เรียนรู้วิธีการตั้งค่า Database สำหรับโปรเจกต์ PHP ของเรา ซึ่งเป็นส่วนสำคัญในการจัดเก็บข้อมูลของแอปพลิเคชัน ในบทนี้ เราจะมาเรียนรู้เครื่องมือที่สำคัญอีกอย่างหนึ่ง นั่นคือ Composer ซึ่งจะช่วยให้เราจัดการ Dependencies หรือ Library ภายนอกที่เราใช้ในโปรเจกต์ได้อย่างง่ายดาย
Composer คืออะไร?
Composer เป็นเครื่องมือจัดการ Dependencies สำหรับภาษา PHP เปรียบเสมือนผู้ช่วยที่จะคอยจัดการ Library ต่างๆ ที่โปรเจกต์ของเราต้องการใช้งาน ไม่ว่าจะเป็นการติดตั้ง, อัปเดต, หรือถอนการติดตั้ง Library เหล่านั้น ทำให้เราไม่ต้องเสียเวลาดาวน์โหลดและจัดการไฟล์เองทั้งหมด
ลองนึกภาพว่าคุณกำลังสร้างบ้าน การใช้ Composer ก็เหมือนกับการมีร้านวัสดุก่อสร้างที่จัดเตรียมอุปกรณ์และเครื่องมือที่จำเป็นให้คุณ พร้อมทั้งดูแลเรื่องการจัดส่งและตรวจสอบคุณภาพของวัสดุเหล่านั้น ทำให้คุณสามารถมุ่งเน้นไปที่การออกแบบและสร้างบ้านได้อย่างเต็มที่
ทำไมต้องใช้ Composer?
- จัดการ Dependencies ได้ง่าย: Composer จะจัดการเรื่องการดาวน์โหลด, ติดตั้ง, และอัปเดต Library ที่โปรเจกต์ของเราต้องการใช้งาน ทำให้เราไม่ต้องเสียเวลาจัดการเอง
- Dependency Resolution: Composer จะช่วยแก้ไขปัญหา Dependency Conflict ที่อาจเกิดขึ้นได้ เช่น Library A ต้องการ Library B เวอร์ชั่น 1.0 แต่ Library C ต้องการ Library B เวอร์ชั่น 2.0 Composer จะช่วยหาเวอร์ชั่นที่เหมาะสมที่สุด หรือแจ้งเตือนหากไม่สามารถแก้ไขได้
- Autoloading: Composer จะสร้าง Autoloader ให้เรา ทำให้เราสามารถเรียกใช้งาน Class ต่างๆ ใน Library ได้โดยไม่ต้อง require หรือ include ไฟล์เอง
- มาตรฐาน: Composer เป็นเครื่องมือมาตรฐานที่ใช้กันอย่างแพร่หลายในวงการ PHP ทำให้เราสามารถทำงานร่วมกับคนอื่นได้อย่างง่ายดาย
การติดตั้ง Composer
การติดตั้ง Composer นั้นค่อนข้างง่าย มีหลายวิธีขึ้นอยู่กับระบบปฏิบัติการที่คุณใช้งาน
สำหรับ Windows
- ดาวน์โหลด Composer Setup จาก https://getcomposer.org/Composer-Setup.exe
- รัน Composer-Setup.exe และทำตามขั้นตอนใน Wizard
- ตรวจสอบให้แน่ใจว่า Composer ถูกเพิ่มเข้าไปใน PATH environment variable แล้ว (โดยปกติ Wizard จะจัดการให้)
- เปิด Command Prompt หรือ Terminal แล้วพิมพ์
composerหาก Composer ทำงานได้ถูกต้อง จะแสดงผล Command List
สำหรับ macOS และ Linux
คุณสามารถติดตั้ง Composer ผ่าน Command Line ได้โดยใช้คำสั่งต่อไปนี้:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer
คำสั่งเหล่านี้จะดาวน์โหลด Composer Installer, รัน Installer, และย้าย Composer ไปไว้ใน /usr/local/bin ทำให้คุณสามารถเรียกใช้งาน Composer ได้จากทุกที่ใน Terminal
หลังจากติดตั้งเสร็จสิ้น ให้ตรวจสอบว่า Composer ทำงานได้ถูกต้องโดยพิมพ์ composer ใน Terminal หาก Composer ทำงานได้ถูกต้อง จะแสดงผล Command List
การสร้างไฟล์ composer.json
เมื่อเราติดตั้ง Composer เรียบร้อยแล้ว ขั้นตอนต่อไปคือการสร้างไฟล์ composer.json ซึ่งเป็นไฟล์ที่เก็บข้อมูลเกี่ยวกับ Dependencies ของโปรเจกต์ของเรา ไฟล์นี้จะบอก Composer ว่าเราต้องการ Library อะไรบ้าง และเวอร์ชั่นอะไร
คุณสามารถสร้างไฟล์ composer.json ได้ด้วยตัวเอง หรือใช้คำสั่ง composer init เพื่อให้ Composer ช่วยสร้างไฟล์ให้เรา
composer init
Composer จะถามคำถามต่างๆ เกี่ยวกับโปรเจกต์ของคุณ เช่น Package name, Description, Author, Minimum Stability, และ Dependencies คุณสามารถตอบคำถามเหล่านี้ หรือปล่อยว่างไว้ก็ได้ แล้วค่อยแก้ไขไฟล์ composer.json เองภายหลัง
ตัวอย่างไฟล์ composer.json:
{
"name": "your-vendor/your-project",
"description": "A simple PHP project",
"type": "project",
"require": {
"monolog/monolog": "^2.0"
},
"autoload": {
"psr-4": {
"YourVendor\\YourProject\\": "src/"
}
}
}
ในตัวอย่างนี้ เรากำหนดว่าโปรเจกต์ของเราต้องการ Library monolog/monolog เวอร์ชั่น 2.0 ขึ้นไป (^2.0 หมายถึงเวอร์ชั่น 2.0 หรือสูงกว่า แต่ไม่รวมเวอร์ชั่น 3.0) และกำหนด Autoloading ให้ Composer รู้ว่า Class ที่อยู่ใน Namespace YourVendor\YourProject\ จะอยู่ใน Directory src/
อธิบายส่วนประกอบของ composer.json
- name: ชื่อ Package ในรูปแบบ
vendor/package-name(เช่นacme/hello-world). - description: คำอธิบายสั้นๆ เกี่ยวกับ Package.
- type: ประเภทของ Package (เช่น
project,library,metapackage). - require: รายการ Dependencies ที่ Package นี้ต้องการ โดยระบุชื่อ Package และ เวอร์ชั่นที่ต้องการ.
- autoload: กำหนดวิธีการ Autoloading Class ต่างๆ ใน Package.
การใช้ composer install
เมื่อเรามีไฟล์ composer.json แล้ว ขั้นตอนต่อไปคือการติดตั้ง Dependencies โดยใช้คำสั่ง composer install
composer install
คำสั่งนี้จะอ่านไฟล์ composer.json และดาวน์โหลด Library ที่ระบุไว้ลงใน Directory vendor/ นอกจากนี้ Composer จะสร้างไฟล์ vendor/autoload.php ซึ่งเป็น Autoloader ที่เราสามารถใช้เพื่อเรียกใช้งาน Class ต่างๆ ใน Library ได้
หลังจากรันคำสั่ง composer install แล้ว คุณจะเห็น Directory vendor/ ถูกสร้างขึ้นใน Directory โปรเจกต์ของคุณ ภายใน Directory นี้จะมี Library ที่คุณระบุไว้ในไฟล์ composer.json รวมถึงไฟล์ autoload.php
การใช้งาน Autoloader
ในการใช้งาน Autoloader ที่ Composer สร้างให้ เราจะต้อง include ไฟล์ vendor/autoload.php ในไฟล์ PHP ของเรา
<?php
require_once __DIR__ . '/vendor/autoload.php';
// Your code here
หลังจาก include ไฟล์ autoload.php แล้ว เราสามารถเรียกใช้งาน Class ต่างๆ ใน Library ได้โดยไม่ต้อง require หรือ include ไฟล์เอง
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// Create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING));
// Add records to the log
$log->warning('Foo');
$log->error('Bar');
ในตัวอย่างนี้ เราใช้ Library monolog/monolog เพื่อสร้าง Logger และเขียน Log ข้อความ การที่เราสามารถเรียกใช้งาน Class Logger และ StreamHandler ได้โดยไม่ต้อง require หรือ include ไฟล์เอง ก็เป็นเพราะ Composer Autoloader นั่นเอง
ข้อผิดพลาดที่พบบ่อยและการแก้ไข
- Dependency Conflict: Composer อาจแจ้งเตือนว่ามี Dependency Conflict หาก Library ที่เราต้องการใช้งาน ต้องการ Library อื่นๆ ที่มีเวอร์ชั่นขัดแย้งกัน วิธีแก้ไขคือการพยายามปรับเวอร์ชั่นของ Library ในไฟล์
composer.jsonหรือใช้ Version Constraint Operators ที่ยืดหยุ่นมากขึ้น - Class Not Found: หากคุณ include ไฟล์
vendor/autoload.phpแล้ว แต่ยังไม่สามารถเรียกใช้งาน Class ใน Library ได้ อาจเป็นเพราะ Class นั้นไม่ได้ถูก Autoload อย่างถูกต้อง ตรวจสอบให้แน่ใจว่า Namespace และ Directory ของ Class ถูกต้องตามที่กำหนดไว้ในไฟล์composer.json - Composer Command Not Found: หากคุณพิมพ์
composerใน Terminal แล้วได้ข้อความว่า "command not found" แสดงว่า Composer ยังไม่ได้ถูกเพิ่มเข้าไปใน PATH environment variable ตรวจสอบขั้นตอนการติดตั้ง Composer อีกครั้ง และตรวจสอบให้แน่ใจว่า Composer ถูกเพิ่มเข้าไปใน PATH แล้ว
สรุป
ในบทนี้ เราได้เรียนรู้วิธีการใช้ Composer เพื่อจัดการ Dependencies ในโปรเจกต์ PHP ของเรา Composer เป็นเครื่องมือที่สำคัญที่จะช่วยให้เราทำงานกับ Library ภายนอกได้อย่างง่ายดายและมีประสิทธิภาพ ในบทเรียนต่อไป เราจะมาเรียนรู้เกี่ยวกับการใช้ Version Control ด้วย Git ซึ่งเป็นอีกเครื่องมือที่สำคัญในการพัฒนาซอฟต์แวร์