การสร้างและรันโปรเจกต์ PHPixie บน macOS ด้วย ServBay
PHPixie เป็นเฟรมเวิร์ก PHP ที่มีน้ำหนักเบาและประสิทธิภาพสูง ถูกออกแบบมาเพื่อการพัฒนาเว็บแอปพลิเคชันที่รวดเร็ว โดยใช้โครงสร้างแบบ HMVC (Hierarchical Model-View-Controller) มีโค้ดที่เป็นระเบียบและประมวลผลข้อมูลได้อย่างมีประสิทธิภาพ PHPixie เป็นที่นิยมในหมู่นักพัฒนาเพราะความเรียบง่าย ยืดหยุ่น และความเร็วสูง
จุดเด่นและข้อดีของ PHPixie
- เบา: มีโครงสร้างหลักเรียบง่าย ประกอบไปด้วยคอมโพเนนต์ที่จำเป็นสำหรับการสร้างแอปฯ เท่านั้น เริ่มต้นและรันแอปได้เร็ว
- ประสิทธิภาพสูง: ดีไซน์ที่คำนึงถึงการประมวลผลที่รวดเร็ว รองรับงานที่ต้องการความเร็วและรับข้อมูลจำนวนมากพร้อมกัน
- เรียนรู้ง่าย: มี API ที่เข้าใจง่ายและเอกสารครบถ้วน ทำให้นักพัฒนาสามารถเรียนรู้ได้เร็ว
- ยืดหยุ่น: โครงสร้างไม่แน่นนัก สามารถเลือกใช้และเชื่อมต่อกับไลบรารีหรือคอมโพเนนต์อื่นๆ ได้ตามต้องการ
- มีชุมชนสนับสนุน: กลุ่มนักพัฒนาที่ให้คำปรึกษา และมีส่วนขยายจากบุคคลที่สามให้เลือกใช้งานจำนวนมาก
PHPixie เหมาะสำหรับการสร้างแอปพลิเคชันเว็บประสิทธิภาพสูง ตั้งแต่โปรเจกต์ขนาดเล็กไปจนถึงระบบระดับองค์กร
สร้างและรันโปรเจกต์ PHPixie ด้วย ServBay
บทความนี้จะแนะนำขั้นตอนการใช้ ServBay (เครื่องมือสร้างสภาพแวดล้อมสำหรับนักพัฒนาเว็บ) เพื่อเริ่มต้นโปรเจกต์ PHPixie โดยใช้ PHP, Composer และฟีเจอร์ "เว็บไซต์" สำหรับตั้งค่าเซิร์ฟเวอร์เว็บ รวมถึงแสดงวิธีเข้าถึงโปรเจกต์จากเครื่องของคุณและเชื่อมต่อกับฐานข้อมูล/แคชต่างๆ
ข้อกำหนดเบื้องต้น
- ติดตั้งและเปิดใช้งาน ServBay บน macOS เรียบร้อยแล้ว (ServBay มี PHP, Composer, ฐานข้อมูลหลายแบบ—MySQL, PostgreSQL, MongoDB, Redis ฯลฯ—และ Caddy Web Server พร้อมใช้งาน)
- มีพื้นฐานการใช้คำสั่ง Terminal
สร้างโปรเจกต์ PHPixie
ข้อแนะนำเส้นทางการจัดเก็บเว็บไซต์
ServBay แนะนำให้จัดวางโปรเจกต์เว็บไซต์ไว้ในโฟลเดอร์ /Applications/ServBay/www
เพื่อจัดการและควบคุมสิทธิ์การเข้าถึงได้ง่าย
- ตรวจสอบการติดตั้ง Composer: ServBay ได้ติดตั้ง Composer มาให้เรียบร้อยแล้ว ไม่ต้องติดตั้งเพิ่ม สามารถตรวจสอบเวอร์ชันด้วยคำสั่ง
composer --version
- สร้างไดเรกทอรีโปรเจกต์: สร้างโฟลเดอร์ใหม่สำหรับโปรเจกต์ PHPixie แล้วเข้าไปในไดเรกทอรีนั้นbash
cd /Applications/ServBay/www mkdir servbay-phpixie-app cd servbay-phpixie-app
1
2
3 - สร้างโปรเจกต์ PHPixie ด้วย Composer: รันคำสั่ง Composer เพื่อดึงเทมเพลตโปรเจกต์bashComposer จะดาวน์โหลด PHPixie และไลบรารีที่จำเป็นลงในโฟลเดอร์โปรเจกต์
composer create-project phpixie/project .
1
ตั้งค่าเซิร์ฟเวอร์เว็บ
ใช้ฟีเจอร์ เว็บไซต์ ใน ServBay เพื่อกำหนดค่า Caddy Web Server ให้ชี้ไปที่โปรเจกต์ PHPixie ได้ถูกต้อง
เปิดแอปฯ ServBay
ไปที่หน้ารายการ เว็บไซต์ (Websites)
คลิกเพิ่มเว็บไซต์ใหม่
กรอกข้อมูลเว็บไซต์:
- ชื่อ: เช่น
My First PHPixie Dev Site
(ชื่อใช้งานใน ServBay) - โดเมน: เช่น
servbay-phpixie-test.local
(โดเมนสำหรับเข้าถึงเว็บจากเบราว์เซอร์) - ประเภทเว็บไซต์: เลือก
PHP
- เวอร์ชัน PHP: เลือกเวอร์ชันที่ต้องการใช้งาน เช่น
8.3
- Document Root (โฟลเดอร์เว็บไซต์): กำหนดให้ชี้ไปที่โฟลเดอร์
web
ภายในโปรเจกต์/Applications/ServBay/www/servbay-phpixie-app/web
ทำไมต้องใช้โฟลเดอร์
/web
?ไฟล์เริ่มต้น (entry point) ของ PHPixie คือ
web/index.php
เพื่อความปลอดภัยและปฏิบัติที่ดีที่สุด ควรกำหนด Document Root ให้ชี้ตรงไปที่โฟลเดอร์นี้ ไม่ใช่โฟลเดอร์หลักของโปรเจกต์ เพื่อป้องกันการเข้าถึงไฟล์สำคัญ (เช่น ไฟล์ config หรือ vendor เป็นต้น)- ชื่อ: เช่น
บันทึกข้อมูล ServBay จะตั้งค่า Caddy และปรับ hosts file ให้อัตโนมัติ (ถ้าจำเป็น) สำหรับโดเมน
servbay-phpixie-test.local
เพื่อให้ชี้ไปที่เซิร์ฟเวอร์บนเครื่องของคุณ
สำหรับขั้นตอนเพิ่มเว็บไซต์อย่างละเอียด ดู เพิ่มเว็บไซต์แรก
เพิ่มโค้ดตัวอย่าง
เพื่อทดสอบการรันโปรเจกต์และเชื่อมต่อกับฐานข้อมูล/แคชต่างๆ ให้ใส่โค้ดตัวอย่างตามนี้
สร้าง Controller ตัวอย่าง: สร้างไฟล์
src/App/HTTP/Controller/Home.php
แล้วใส่โค้ดต่อไปนี้ เข้าไป หากโฟลเดอร์/ไฟล์ยังไม่มี ให้สร้างใหม่php<?php namespace App\HTTP\Controller; use PHPixie\HTTP\Request; use PHPixie\Template; use PHPixie\Database\Query; // นำเข้า Query class class Home extends \PHPixie\Controller { protected $template; public function __construct(Template $template) { $this->template = $template; } // action สำหรับแสดงหน้าแรก public function action_index(Request $request) { // render template ที่ assets/templates/app/home.php return $this->template->render('app:home'); } // action สำหรับทดสอบ Memcached public function action_memcached(Request $request) { $cache = $this->components->cache(); $cache->set('key', 'Hello Memcached from ServBay!', 60); // บันทึกข้อมูล มีอายุ 60 วินาที $value = $cache->get('key'); // ดึงข้อมูลกลับมา return $this->response()->string($value); // ตอบกลับเป็น string } // action สำหรับทดสอบ Redis public function action_redis(Request $request) { $redis = $this->components->redis(); $redis->set('key', 'Hello Redis from ServBay!'); // บันทึกข้อมูล $value = $redis->get('key'); // ดึงข้อมูลกลับมา return $this->response()->string($value); // ตอบกลับเป็น string } // action สำหรับเพิ่มผู้ใช้ลง MySQL/PostgreSQL public function action_add_user(Request $request) { // ใช้ database component ดึง query builder $query = $this->components->database()->query(); // เพิ่มข้อมูลผู้ใช้ลงตาราง 'users' $query->insert('users')->data([ 'name' => 'ServBay Demo User', 'email' => 'demo-' . uniqid() . '@servbay.test', // สร้างอีเมลแบบไม่ซ้ำ ])->execute(); // สั่งเพิ่มข้อมูล return $this->response()->string('User added successfully.'); // ตอบกลับแจ้งผลสำเร็จ } // action สำหรับดึงรายชื่อผู้ใช้ใน MySQL/PostgreSQL public function action_list_users(Request $request) { // ใช้ database component ดึง query builder $query = $this->components->database()->query(); // ดึงข้อมูลผู้ใช้ทั้งหมดจากตาราง 'users' $users = $query->select('*')->from('users')->execute()->fetchAll(); // สั่ง query และรับผลลัพธ์ทั้งหมด return $this->response()->json($users); // ตอบกลับเป็น JSON } }
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67สร้าง template ตัวอย่าง: สร้างไฟล์
assets/templates/app/home.php
แล้วใส่โค้ดต่อไปนี้ หากโฟลเดอร์/ไฟล์ยังไม่มี ให้สร้างใหม่php<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Welcome to PHPixie on ServBay</title> <style> body { font-family: sans-serif; line-height: 1.6; margin: 20px; } h1 { color: #333; } p { margin-bottom: 15px; } code { background-color: #f4f4f4; padding: 2px 5px; border-radius: 4px; } ul { list-style: none; padding: 0; } li { margin-bottom: 10px; } li a { text-decoration: none; color: #007bff; } li a:hover { text-decoration: underline; } </style> </head> <body> <h1>Welcome to PHPixie on ServBay</h1> <p>This page is being generated dynamically by your PHPixie application running on ServBay.</p> <h2>ลิงก์ฟีเจอร์ตัวอย่าง:</h2> <ul> <li><a href="/home/memcached">ทดสอบ Memcached</a></li> <li><a href="/home/redis">ทดสอบ Redis</a></li> <li><a href="/home/add_user">เพิ่มผู้ใช้ลงฐานข้อมูล</a></li> <li><a href="/home/list_users">แสดงรายชื่อผู้ใช้ในฐานข้อมูล</a></li> </ul> <p>โปรดตรวจสอบว่าคุณตั้งค่าฐานข้อมูลและระบบแคชครบถ้วนแล้ว</p> </body> </html>
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
การเข้าถึงเว็บไซต์พื้นฐาน
เมื่อตั้งค่าเว็บไซต์ใน ServBay และเพิ่มโค้ดตัวอย่างเสร็จ คุณสามารถเปิดเบราว์เซอร์แล้วเข้าถึงโปรเจกต์ผ่านโดเมนที่ตั้งไว้
- เปิดเบราว์เซอร์ ไปที่
https://servbay-phpixie-test.local
- คุณจะเห็นหน้า Welcome to PHPixie on ServBay และลิงก์ฟีเจอร์ต่างๆ
หากเข้าเว็บไม่ได้ให้ตรวจสอบว่า:
- ServBay กำลังทำงานอยู่
- ตั้งค่าข้อมูลเว็บไซต์ใน ServBay ถูกต้อง โดยเฉพาะโดเมน ประเภทเว็บไซต์ และโฟลเดอร์เว็บไซต์
- hosts file ในเครื่องมีการตั้งค่า
servbay-phpixie-test.local
ไว้ถูกต้อง (ServBay จะจัดการให้โดยอัตโนมัติ) - PHP เวอร์ชันที่เลือกใน ServBay เปิดใช้งานแล้ว
ตัวอย่างการเชื่อมต่อฐานข้อมูลและระบบแคช
PHPixie รองรับหลายระบบฐานข้อมูลและแคชในตัว ServBay มีทั้ง MySQL, PostgreSQL, Redis, Memcached ให้ใช้งาน สามารถเชื่อมต่อกับโปรเจกต์ PHPixie ได้ง่าย
หมายเหตุสำคัญ: ก่อนใช้งานฐานข้อมูล ให้เปิด service ที่เกี่ยวข้องใน ServBay (เช่น MySQL หรือ PostgreSQL) และสร้างฐานข้อมูลสำหรับโปรเจกต์ (ตัวอย่างนี้ใช้ชื่อ servbay_phpixie_app
) สามารถตั้งค่าฐานข้อมูลผ่านเครื่องมือจัดการ (เช่น Sequel Ace, Postico, TablePlus ฯลฯ) หรือใช้ Terminal ได้ โดย user มักเป็น root
และรหัสผ่าน password
(ตรวจสอบกับค่าของ ServBay ในเครื่องคุณ)
ตั้งค่าการเชื่อมต่อฐานข้อมูล
ขึ้นอยู่กับว่าจะใช้ MySQL หรือ PostgreSQL ให้แก้ไขไฟล์ assets/config/database.php
ภายในโปรเจกต์ โดยที่ ServBay จะใช้ host เป็น 127.0.0.1
เป็นค่ามาตรฐาน
ตัวอย่างการตั้งค่า MySQL (assets/config/database.php
):
php
<?php
return [
'default' => [
'driver' => 'pdo',
// ปรับ connection สำหรับแต่ละประเภทฐานข้อมูล
'connection' => 'mysql:host=127.0.0.1;dbname=servbay_phpixie_app',
'user' => 'root', // user ของ ServBay ตามค่า default
'password' => 'password', // รหัสผ่าน default (ปรับตามที่ตั้งค่าไว้)
'options' => []
]
];
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
ตัวอย่างการตั้งค่า PostgreSQL (assets/config/database.php
):
php
<?php
return [
'default' => [
'driver' => 'pdo',
// ปรับ connection สำหรับแต่ละประเภทฐานข้อมูล
'connection' => 'pgsql:host=127.0.0.1;dbname=servbay_phpixie_app',
'user' => 'root', // user ของ ServBay ตามค่า default
'password' => 'password', // รหัสผ่าน default (ปรับตามที่ตั้งค่าไว้)
'options' => []
]
];
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
สร้างตารางฐานข้อมูล (Migration)
PHPixie มีเครื่องมือสำหรับจัดการ Migration ฐานข้อมูล สามารถ version control โครงสร้างตารางได้ง่าย
- เปิด Terminal: เข้าไปที่ root โปรเจกต์ PHPixiebash
cd /Applications/ServBay/www/servbay-phpixie-app
1 - สร้างไฟล์ Migration: รัน PHPixie CLI เพื่อสร้าง migration สำหรับตาราง
users
bashจะได้ไฟล์ในโฟลเดอร์php pixie generate:migration create_users_table
1assets/migrations
ที่มี timestamp อยู่ในชื่อ - แก้ไข migration: เปิดไฟล์ migration ใหม่ (เช่น
YYYY_MM_DD_HHMMSS_create_users_table.php
), กำหนดโครงสร้างของตารางusers
ดังนี้php<?php use PHPixie\Database\Migration; use PHPixie\Database\Schema\Table; class CreateUsersTable extends Migration { public function up() { // สร้างตาราง 'users' ด้วย schema builder $this->schema->create('users', function(Table $table) { $table->increments('id'); // primary key แบบ auto-increment $table->string('name'); // ชื่อผู้ใช้ $table->string('email')->unique(); // อีเมล, กำหนด unique $table->timestamps(); // สร้างคอลัมน์ created_at และ updated_at }); } public function down() { // ลบตาราง 'users' เมื่อ rollback $this->schema->drop('users'); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 - รัน migration: ที่ root โปรเจกต์ รันคำสั่งเพื่อสร้างตารางbashหากสำเร็จจะมีแจ้งผลใน Terminal และเช็คผ่านเครื่องมือจัดการฐานข้อมูลได้ว่าตาราง
php pixie migrate
1users
ถูกสร้างเรียบร้อยในฐานข้อมูลservbay_phpixie_app
เชื่อมต่อฐานข้อมูลแบบ RDBMS (MySQL/PostgreSQL)
ตามตัวอย่าง Controller ใน src/App/HTTP/Controller/Home.php
มี action สำหรับเพิ่มผู้ใช้และแสดงรายชื่อโดยเชื่อมต่อกับ MySQL/PostgreSQL ผ่าน PHPixie
- เพิ่มผู้ใช้: เข้าเว็บ
https://servbay-phpixie-test.local/home/add_user
จะเพิ่มข้อมูลผู้ใช้ใหม่ในตารางusers
- แสดงรายชื่อ: เข้าเว็บ
https://servbay-phpixie-test.local/home/list_users
จะแสดงข้อมูลผู้ใช้ทั้งหมดเป็น JSON
ตั้งค่าและใช้งาน NoSQL (Memcached/Redis)
ServBay มี Memcached และ Redis พร้อมทั้ง extension PHP ให้ใช้งาน เพียงแค่ตั้งค่าในโปรเจกต์ PHPixie
ตัวอย่างการตั้งค่า Memcached (assets/config/cache.php
):
แก้ไขหรือสร้างไฟล์ assets/config/cache.php
แล้วใส่โค้ดนี้
php
<?php
return [
'default' => [
'driver' => 'memcached',
'servers' => [
[
'host' => '127.0.0.1', // host สำหรับ Memcached ใน ServBay
'port' => 11211, // port สำหรับ Memcached
'weight' => 100,
],
],
],
];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
ตัวอย่างการตั้งค่า Redis (assets/config/redis.php
):
แก้ไขหรือสร้างไฟล์ assets/config/redis.php
แล้วใส่โค้ดนี้
php
<?php
return [
'default' => [
'hostname' => '127.0.0.1', // host สำหรับ Redis ใน ServBay
'port' => 6379, // port สำหรับ Redis
'timeout' => 0,
'database' => 0, // ดัชนีฐานข้อมูล Redis
],
];
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
การใช้งาน Memcached/Redis จาก Controller:
ดูตัวอย่างใน Controller ที่เราได้เพิ่ม action สำหรับทดสอบ Memcached และ Redis
- ทดสอบ Memcached: เข้าลิงก์
https://servbay-phpixie-test.local/home/memcached
เพื่อเขียนและอ่านข้อมูลใน Memcached - ทดสอบ Redis: เข้าลิงก์
https://servbay-phpixie-test.local/home/redis
เพื่อเขียนและอ่านข้อมูลใน Redis
อย่าลืมเปิดใช้งานบริการ Memcached และ Redis ใน ServBay ให้พร้อมก่อน
สรุป
จากขั้นตอนทั้งหมดนี้ คุณสามารถสร้าง ตั้งค่า และรันโปรเจกต์ PHPixie ในเครื่อง macOS โดยใช้ ServBay ได้อย่างง่ายดาย เรียนรู้การใช้ Composer ในการสร้างโปรเจกต์ ตั้งค่าเซิร์ฟเวอร์เว็บผ่านฟีเจอร์ "เว็บไซต์" ใน ServBay ตั้งค่าและทดสอบการเชื่อมต่อกับฐานข้อมูลและระบบแคช
ServBay ทำให้การติดตั้งและจัดการสภาพแวดล้อมสำหรับการพัฒนา PHP เป็นเรื่องง่ายและสะดวก ให้คุณโฟกัสกับการพัฒนาโค้ดได้เต็มที่ หวังว่าคู่มือนี้จะช่วยให้คุณเริ่มใช้งาน PHPixie สำหรับโปรเจกต์เว็บถัดไปได้รวดเร็วและมั่นใจ!