วิธีใช้ Composer ที่มาพร้อมกับ ServBay ในการจัดการโครงการ PHP
ServBay เป็นสภาพแวดล้อมการพัฒนาเว็บในเครื่องที่ทรงพลัง ซึ่งติดตั้ง Composer มาให้อย่างครบถ้วน ช่วยให้นักพัฒนาจัดการ dependency ของโครงการ PHP ได้อย่างสะดวก Composer ถือเป็นเครื่องมือสำคัญในการพัฒนา PHP สมัยใหม่ ช่วยให้รวมและบริหารจัดการไลบรารีจากภายนอกได้ง่าย จัดการความซับซ้อนของ dependency อัตโนมัติ พร้อมความสามารถ autoload ที่สะดวกสบาย ด้วย ServBay คุณสามารถใช้ Composer ได้ทันทีโดยไม่ต้องติดตั้งหรือคอนฟิกอะไรเพิ่มเติม ช่วยเร่ง workflow การพัฒนา PHP ของคุณให้รวดเร็วขึ้น
Composer คืออะไร
Composer คือเครื่องมือสำหรับบริหารจัดการ dependency ในโครงการ PHP โดยให้นักพัฒนาระบุไลบรารีภายนอก (หรือที่เรียกว่า package) ที่โครงการต้องใช้ และ Composer จะคอยจัดการติดตั้ง/อัปเดต package เหล่านั้นให้อัตโนมัติ อีกทั้ง Composer ยังรองรับการจัดการ package ประเภทอื่น ๆ เช่น เฟรมเวิร์ก คอมโพเนนต์ ปลั๊กอิน ฯลฯ
จุดเด่นหลัก
- การจัดการ Dependency: Composer จัดการความเข้ากันได้และความสัมพันธ์ของ dependency ต่าง ๆ ในโครงการโดยอัตโนมัติ ป้องกันปัญหาความขัดแย้งของเวอร์ชัน
- ระบบ Autoload: Composer มีฟีเจอร์ autoload ที่สร้างไฟล์ autoloader กลาง ช่วยให้นักพัฒนาเรียกใช้ class หรือไลบรารีต่าง ๆ ที่ติดตั้งผ่าน Composer ได้เลย โดยไม่ต้อง include หรือ require ไฟล์แบบแมนนวล
- การจัดการเวอร์ชัน: นักพัฒนาสามารถระบุเวอร์ชันที่ต้องการของ dependency ในไฟล์
composer.jsonComposer จะดาวน์โหลดแพ็กเกจที่ตรงตามข้อกำหนด พร้อมล็อกเวอร์ชันไว้ในไฟล์composer.lockทำให้มั่นใจว่าเพื่อนร่วมทีมและสภาพแวดล้อมอื่น ๆ ใช้ dependency เวอร์ชันเดียวกัน - การจัดการ package: Composer ใช้ repository กลาง เช่น Packagist สำหรับค้นหาและดาวน์โหลดแพ็กเกจ นักพัฒนาจึงนำ php library ยอดนิยมมาใช้งานได้สะดวก
- ชุมชนขนาดใหญ่: Composer ได้รับการสนับสนุนจากชุมชนผู้พัฒนาขนาดใหญ่ มีเอกสารและทรัพยากรอธิบายมากมาย
Composer ที่มาพร้อมให้ใน ServBay
ServBay มาพร้อม PHP หลายเวอร์ชัน และติดตั้ง Composer ให้อัตโนมัติในขั้นตอน setup ผู้ใช้จึงไม่ต้องโหลดหรือติดตั้ง Composer แยกเอง ServBay จะตั้งค่าสภาพแวดล้อมให้ Composer ทำงานได้ทันที โดยปกติ Composer จะถูก map กับเวอร์ชัน PHP ที่ใช้งานใน ServBay ขณะนั้น คุณจึงเรียกใช้คำสั่ง composer หรือ composer-2.2 ใน terminal ของโครงการได้เลย
ข้อควรทราบ
Composer มี 2 เวอร์ชันหลัก ได้แก่ Composer 2.8.x (เวอร์ชันล่าสุด) และ Composer 2.2.x LTS (สำหรับ PHP เวอร์ชันเก่า) โดยมีรายละเอียดการรองรับดังนี้:
Composer 2.8.xรองรับPHP 7.2+Composer 2.2.x LTSรองรับPHP 5.3 - PHP 7.1
ServBay จะติดตั้ง Composer 2.8.x เป็นค่าเริ่มต้น ซึ่งเหมาะกับ PHP 7.2+
หากคุณต้องการใช้ Composer บน PHP 5.3 - PHP 7.1 ให้เข้าไปที่เมนู ซอฟต์แวร์ ติดตั้ง Composer 2.2.x LTS แล้วใช้คำสั่ง composer-2.2 ทั้งสองเวอร์ชันนี้สามารถใช้งานร่วมกันได้โดยไม่กระทบกัน
การใช้ Composer จัดการ dependency ของโครงการ
Composer จะบริหารจัดการ dependency โครงการผ่านไฟล์ composer.json ที่อยู่ใน root โฟลเดอร์ของโปรเจ็กต์ ขั้นตอนพื้นฐานในการใช้งานไฟล์ composer.json มีดังนี้
1. สร้างไฟล์ composer.json
ใน root directory ของโครงการ PHP ของคุณ สร้างไฟล์ชื่อ composer.json เช่น หากทำงานใน /Applications/ServBay/www/my_php_project ก็สร้างไฟล์นี้ไว้ที่นั่น
composer.json เป็นไฟล์ JSON ที่มี key "require" สำหรับระบุ dependency ที่โครงการต้องใช้โดยระบุชื่อแพ็กเกจ (ในรูปแบบ vendor/package) และข้อกำหนดเวอร์ชัน
ตัวอย่างเช่น ต้องการติดตั้ง Monolog (PHP logging library ยอดนิยม) เวอร์ชัน 2.0 ขึ้นไป:
json
{
"require": {
"monolog/monolog": "^2.0"
}
}1
2
3
4
5
2
3
4
5
ตรง ^2.0 หมายถึง Composer จะติดตั้ง version 2.0.0 ขึ้นไป แต่ไม่เกิน 3.0.0
2. ติดตั้ง dependency
เปิด terminal ไปยัง root directory ที่มีไฟล์ composer.json แล้วรันคำสั่งนี้เพื่อติดตั้ง dependency:
sh
composer install1
เมื่อรันคำสั่งนี้:
- Composer จะอ่านข้อมูลจาก
composer.json - คำนวนหา dependency ทั้งหมด (รวมทั้ง library ที่คุณ require และ dependency ของมัน)
- ดาวน์โหลดทุกไลบรารีไว้ในโฟลเดอร์
vendor - สร้างไฟล์
composer.lockเพื่อบันทึกเวอร์ชัน library ที่ติดตั้งจริง เหมาะกับการ commit ไว้ในระบบ version control (เช่น Git) เพื่อให้สมาชิกในทีมใช้ dependency เวอร์ชันตรงกันทุกคน - สร้างไฟล์ autoload ชื่อ
vendor/autoload.php
-directory ของคุณจะมีโฟลเดอร์ vendor และไฟล์ composer.lock หลังติดตั้งสำเร็จ
การใช้งาน Composer Autoload
อีกหนึ่งฟีเจอร์สำคัญของ Composer คือ autoload ตามมาตรฐานกลุ่มต่าง ๆ (เช่น PSR-0, PSR-4) เพื่อ map class กับ path อัตโนมัติ
วิธีตั้งค่าและใช้งาน autoload มีดังนี้
1. กำหนดฟิลด์ autoload
กำหนดหรือเพิ่มฟิลด์ autoload ในไฟล์ composer.json ตัวอย่างเช่น กำหนดให้ namespace App\ ไปยังโฟลเดอร์ src/ ด้วยมาตรฐาน PSR-4:
json
{
"require": {
"monolog/monolog": "^2.0"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
หมายความว่าทุก class ที่ขึ้นต้นด้วย App\ Composer จะค้นหาไฟล์ใน src/ (เช่น App\MyClass จะเป็น src/MyClass.php)
2. สร้าง autoload mapping ใหม่
หลังปรับ autoload config ให้รันคำสั่งนี้อัปเดต mapping:
sh
composer dump-autoload1
คำสั่งนี้จะ re-generate ไฟล์ vendor/autoload.php หากคุณแค่ install หรือ update dependency โดยไม่เปลี่ยน autoload config คำสั่ง composer install หรือ composer update ก็จะจัดการขั้นตอนนี้ให้อัตโนมัติ
3. เรียกใช้ autoload ในโค้ด PHP
ด้านบนของสคริปต์ PHP ให้ include autoloader ที่ Composer สร้างให้:
php
<?php
// เรียกใช้ไฟล์ autoload ของ Composer
require __DIR__ . '/vendor/autoload.php';
// ตอนนี้สามารถใช้ class ที่ติดตั้งหรือกำหนดใน autoload ได้ทันที
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use App\MyClass; // หากกำหนด namespace App\ ใน autoload
// ตัวอย่างการใช้ Monolog library
$log = new Logger('name');
$log->pushHandler(new StreamHandler('your.log', Logger::WARNING));
$log->warning('นี่คือข้อความเตือน!');
// ตัวอย่างการใช้ class ของคุณเอง (หากตั้ง autoload)
// $myObject = new MyClass();
// $myObject->doSomething();
?>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
เพียงแค่ include require __DIR__ . '/vendor/autoload.php'; ทั้งโปรเจ็กต์จะสามารถใช้ class ใด ๆ ที่จัดการโดย Composer ได้หมด ไม่ต้อง include หรือ require ราย class ให้ยุ่งยาก
อัปเดต Dependency
เมื่อโครงการเติบโตหรือ dependency มีอัปเดตใหม่ คุณอาจต้องการอัปเกรดเวอร์ชันให้ทันสมัย
รันคำสั่งนี้ในโฟลเดอร์โปรเจ็กต์:
sh
composer update1
composer updateจะเช็ค dependency ที่ระบุไว้ในcomposer.jsonและตรวจสอบว่ามีเวอร์ชันใหม่ตรงกับเงื่อนไขหรือไม่- จะติดตั้ง/อัปเดตเป็นเวอร์ชันล่าสุดที่ตรงตามเงื่อนไข
- จากนั้น composer จะอัปเดตไฟล์
composer.lockให้แสดงเวอร์ชัน dependency ล่าสุด
ข้อควรระวัง:
composer installvscomposer update: ใช้composer installสำหรับ setup โปรเจ็กต์ใหม่หรือ install dependency ตามที่อยู่ในcomposer.lockเพื่อคงความสอดคล้องกันทุกเครื่อง ส่วนcomposer updateควรใช้เมื่อจะอัปเกรด dependency เป็นเวอร์ชันใหม่ และต้อง commit ทั้งcomposer.jsonและcomposer.lockหลังอัปเกรด โดยเฉพาะในงานเป็นทีม
ข้อควรทราบสำหรับการใช้ Composer ใน ServBay
ServBay อำนวยความสะดวกให้การพัฒนาในเครื่อง แต่เวลาใช้ Composer ให้พิจารณาดังนี้
- สภาพแวดล้อม Terminal: ให้แน่ใจว่าคุณรัน Composer ใน terminal ที่อยู่ภายใต้สิ่งแวดล้อมของ ServBay ปกติ ServBay จะเพิ่ม PHP เวอร์ชันที่เลือกใน PATH แล้วเปิด terminal ใหม่สามารถใช้
phpหรือcomposerได้ทันที หากเจอ errorcommand not foundให้ลองปิด-เปิด terminal ใหม่ หรือเช็กว่า ServBay ทำงานอยู่หรือไม่ - เวอร์ชัน PHP: ServBay อนุญาตให้คุณเปลี่ยน PHP ได้หลายเวอร์ชัน คำสั่ง
composerจะอิงกับ PHP เวอร์ชันปัจจุบันที่เลือกอยู่ใน ServBay หากโครงการต้อง dependency ที่รองรับเฉพาะ PHP เวอร์ชันเก่า ให้เปลี่ยนไปใช้งาน PHP เวอร์ชันนั้นที่ ServBay ก่อน แล้วค่อยรัน Composer - เส้นทางโปรเจ็กต์: แนะนำให้วางโฟลเดอร์เว็บไซต์ไว้ภายใน
/Applications/ServBay/wwwและสร้าง subdirectory สำหรับแต่ละโปรเจ็กต์ พร้อมคอนฟิกเว็บไซต์ใน ServBay เพื่อเข้าใช้งานผ่าน browser จากนั้นใช้ Composer ใน subdirectory ของโปรเจ็กต์นั้น
ตัวอย่างการใช้งาน: ติดตั้งและใช้ GuzzleHttp
ตัวอย่างต่อไปนี้จะสาธิตการติดตั้งและใช้งาน GuzzleHttp (HTTP client library สำหรับ PHP) ใน ServBay
สร้างโฟลเดอร์โปรเจ็กต์และเข้าไปในโฟลเดอร์: สร้างโฟลเดอร์ใหม่ในเว็บรูทของ ServBay แล้วเข้าไป:
shcd /Applications/ServBay/www mkdir guzzle_demo.servbay.demo cd guzzle_demo.servbay.demo1
2
3ตัวอย่างนี้ตั้งชื่อโฟลเดอร์ตาม format ที่ ServBay แนะนำ
สร้าง
composer.json: ในโฟลเดอร์guzzle_demo.servbay.demoสร้างไฟล์composer.jsonดังนี้:json{ "require": { "guzzlehttp/guzzle": "^7.0" }, "autoload": { "psr-4": { "App\\": "src/" } } }1
2
3
4
5
6
7
8
9
10กำหนด autoload แบบ PSR-4 ไว้ แม้ตัวอย่างนี้จะไม่ได้ใช้ class ใน namespace
App\ถือเป็น best practiceติดตั้ง dependency: ในโฟลเดอร์นี้ รันคำสั่งติดตั้ง:
shcomposer install1Composer จะดาวน์โหลด GuzzleHttp และ library ที่เกี่ยวข้อง สร้างโฟลเดอร์
vendorและไฟล์composer.lockสร้างไฟล์ PHP และเรียกใช้ dependency: ในโฟลเดอร์เดียวกัน สร้างไฟล์
index.php:php<?php // เรียกใช้ autoload ของ Composer require __DIR__ . '/vendor/autoload.php'; use GuzzleHttp\Client; use GuzzleHttp\Exception\RequestException; echo "<h1>GuzzleHttp Demo</h1>"; echo "<pre>"; try { // สร้างอินสแตนซ์ของ Guzzle client $client = new Client(); // ส่ง request GET $response = $client->request('GET', 'https://httpbin.org/get', [ 'query' => ['param1' => 'value1', 'param2' => 'value2'] ]); // รับเนื้อหาของ response body $body = $response->getBody()->getContents(); echo "Response Body:\n"; echo $body; // แสดง status code ของ response $statusCode = $response->getStatusCode(); echo "\n\nStatus Code: " . $statusCode; } catch (RequestException $e) { // จัดการ request exception echo "Request Exception:\n"; echo $e->getMessage(); if ($e->hasResponse()) { echo "\nResponse Status: " . $e->getResponse()->getStatusCode(); echo "\nResponse Body: " . $e->getResponse()->getBody()->getContents(); } } catch (\Exception $e) { // จัดการข้อผิดพลาดอื่น echo "An error occurred:\n"; echo $e->getMessage(); } echo "</pre>"; ?>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44สคริปต์นี้ include autoload แล้วใช้ GuzzleHttp ส่ง request ไปยัง API สาธารณะและแสดงผลตอบกลับ
คอนฟิกเว็บไซต์ใน ServBay: เปิด ServBay ไปที่เมนู "เว็บไซต์" (เดิมชื่อ "โฮสต์") กดปุ่มเพิ่มใหม่ กำหนดเว็บไซต์ชี้ไปยัง
/Applications/ServBay/www/guzzle_demo.servbay.demoและตั้ง domain เป็นguzzle_demo.servbay.demoจากนั้นบันทึกและ restart server (Caddy หรือ Nginx)เปิดผ่าน browser: เข้าที่
http://guzzle_demo.servbay.demo/จะเห็นผลลัพธ์จาก PHP script ที่ไปเรียกข้อมูลจากhttps://httpbin.org/get
คำถามที่พบบ่อย (FAQ)
ถาม: ใช้ PHP 5.6 แล้ว Composer รันไม่ได้ ต้องทำอย่างไร?
ตอบ: ServBay ให้บริการทั้ง Composer 2.8.x (ปกติ) และ Composer 2.2.x LTS (รองรับ PHP เก่า) หากต้องการใช้งานกับ PHP 5.6 ให้ติดตั้ง Composer 2.2 LTS แล้วใช้คำสั่ง composer-2.2
ถาม: รันคำสั่ง composer ใน terminal แล้วขึ้นว่า command not found ควรแก้ไขอย่างไร?
ตอบ:
- ตรวจสอบว่า ServBay กำลังทำงานอยู่
- ปิด terminal แล้วเปิดใหม่ เนื่องจาก ServBay จะตั้งค่าตัวแปร environment ระหว่างการเริ่มต้น การเปิด terminal ใหม่จะโหลดค่าเหล่านั้น
- ตรวจสอบว่าเลือก PHP อย่างน้อย 1 เวอร์ชันไว้ใน ServBay
- หากยังมีปัญหา อาจเรียกใช้งาน Composer ผ่าน PHP ที่ ServBay กำลังใช้ เช่น
/Applications/ServBay/php/8.2/bin/php /usr/local/bin/composer install(ตรวจสอบ path ตามที่ติดตั้งจริง ทั้ง PHP และ Composer) อย่างไรก็ดี เป้าหมายของ ServBay คือให้ใช้composerได้ตรง ๆ
ถาม: หากต้องการให้ Composer ใช้ PHP เวอร์ชันเฉพาะใน ServBay ทำอย่างไร?
ตอบ: โดยปกติ Composer จะอิง PHP เวอร์ชันที่เลือกในแถบ PHP ของ ServBay เพียงแค่เลือกเวอร์ชัน PHP ที่ต้องการและเปิดใช้งาน จากนั้นเปิด terminal ใหม่ รัน composer จะใช้งานกับ PHP เวอร์ชันนั้นทันที
ถาม: ไฟล์ composer.lock มีประโยชน์อะไร ควร commit ลง Git หรือไม่?
ตอบ: composer.lock จะล็อกเวอร์ชัน dependency ตามครั้งสุดท้ายที่รัน composer install หรือ composer update ขอแนะนำให้ commit ไฟล์นี้ลง version control เช่น Git เพื่อให้เพื่อนในทีมและสภาพแวดล้อมอื่นใช้ dependency เวอร์ชันเดียวกันทุกเครื่อง ป้องกันปัญหา “ทำไมในเครื่องฉันทำงานแต่ในของคนอื่นไม่ทำงาน” เมื่อโคลนโครงการไปรัน รัน composer install Composer จะติดตั้งตามที่ระบุใน composer.lock ก่อนเสมอ (ไม่ใช่ composer.json ล้วน ๆ)
สรุป
ServBay มาพร้อม Composer และการตั้งค่าพร้อมใช้งาน เพื่อให้นักพัฒนา PHP ใช้งานง่ายและบริหารจัดการ dependency ในโครงการได้อย่างมีประสิทธิภาพ คุณจะสลับ PHP ได้หลายเวอร์ชัน จัดการ autoload ได้สะดวก สามารถโฟกัสกับการเขียนโค้ดได้อย่างแท้จริง การจับคู่ระหว่าง ServBay กับ Composer คือทางเลือกที่ยอดเยี่ยมและทันสมัยสำหรับการพัฒนา PHP บนเครื่องของคุณ ช่วยเร่งการสร้างสรรค์และดูแลโปรเจ็กต์อย่างมีประสิทธิภาพ
