สร้างและรันโปรเจกต์ PHPixie บน macOS ด้วย ServBay
PHPixie เป็นเฟรมเวิร์ก PHP ที่มีน้ำหนักเบาและประสิทธิภาพสูง ออกแบบมาเพื่อการพัฒนาเว็บแอปพลิเคชันที่รวดเร็ว เป็นไปตามรูปแบบการออกแบบ HMVC (Hierarchical Model-View-Controller) นำเสนอโครงสร้างโค้ดที่เรียบง่ายและประมวลผลได้อย่างมีประสิทธิภาพ ด้วยความเรียบง่าย ยืดหยุ่น และประสิทธิภาพสูง PHPixie จึงได้รับความนิยมจากนักพัฒนาจำนวนมาก
จุดเด่นและข้อดีหลักของ PHPixie
- น้ำหนักเบา: ระบบแกนกลางของ PHPixie ถูกออกแบบอย่างกะทัดรัด มีเฉพาะคอมโพเนนต์ที่จำเป็นต่อการสร้างโปรเจกต์ ทำให้เริ่มต้นและประมวลผลได้อย่างรวดเร็ว
- ประสิทธิภาพสูง: ออกแบบโดยคำนึงถึงประสิทธิภาพ รองรับการร้องขอจำนวนมากได้ดี เหมาะสำหรับแอปที่ต้องการประสิทธิภาพสูง
- เรียนรู้ง่าย: มี API ที่ชัดเจน โค้ดเข้าใจง่าย และเอกสารประกอบละเอียด นักพัฒนาจึงสามารถเริ่มต้นใช้งานได้อย่างรวดเร็ว
- ยืดหยุ่น: โครงสร้างเฟรมเวิร์กไม่ได้ผูกมัดกันแน่น ทำให้สามารถเลือกและผสมผสานไลบรารีหรือคอมโพเนนต์ภายนอกได้ตามต้องการ
- ชุมชนสนับสนุนแข็งแกร่ง: มีชุมชนนักพัฒนาที่กระตือรือร้น พร้อมส่วนขยายและทรัพยากรมากมาย
PHPixie ช่วยให้คุณสร้างเว็บแอปที่มีคุณภาพสูงและประสิทธิภาพเยี่ยมได้อย่างรวดเร็ว เหมาะกับงานตั้งแต่โปรเจกต์ขนาดเล็กไปจนถึงระดับองค์กร
สร้างและรันโปรเจกต์ PHPixie ด้วย ServBay
บทความนี้จะแนะนำขั้นตอนการสร้างและใช้งานโปรเจกต์ PHPixie ด้วยสภาพแวดล้อมพัฒนาเว็บในเครื่องที่ ServBay เตรียมไว้ให้ เราจะใช้งาน PHP และ Composer ที่ฝังมากับ ServBay พร้อมทั้งฟีเจอร์ "เว็บไซต์" เพื่อจัดการเซิร์ฟเวอร์ Caddy ให้เข้ากับโปรเจกต์ และยังสามารถเชื่อมต่อฐานข้อมูล/แคชได้อย่างง่ายดาย
ข้อกำหนดเบื้องต้น
- ติดตั้งและเปิดใช้งาน ServBay บน macOS แล้ว (ServBay มาพร้อม PHP, Composer, ฐานข้อมูลยอดนิยมทั้ง MySQL, PostgreSQL, MongoDB, Redis ฯลฯ และ Caddy Web Server)
- มีพื้นฐานการใช้คำสั่งผ่านเทอร์มินัล
สร้างโปรเจกต์ PHPixie
เส้นทางแนะนำสำหรับจัดเก็บเว็บไซต์
ServBay แนะนำให้คุณจัดเก็บโปรเจกต์เว็บไซต์ในโฟลเดอร์ /Applications/ServBay/www
เพื่อความเป็นระเบียบและการจัดการสิทธิ์การเข้าถึงของ ServBay ได้สะดวก
- ตรวจสอบว่า Composer ถูกติดตั้งแล้ว: ServBay มี Composer มาให้แล้ว คุณไม่จำเป็นต้องติดตั้งเพิ่ม เปิดเทอร์มินัลแล้วพิมพ์
composer --version
เพื่อตรวจสอบ - สร้างโฟลเดอร์โปรเจกต์: ที่ root ที่แนะนำ สร้างโฟลเดอร์ใหม่สำหรับโปรเจกต์ PHPixie แล้วเข้าไปในโฟลเดอร์นั้นbash
cd /Applications/ServBay/www mkdir servbay-phpixie-app cd servbay-phpixie-app
1
2
3 - ใช้ Composer สร้างโปรเจกต์ PHPixie: รันคำสั่ง Composer เพื่อดึงเทมเพลตโปรเจกต์ PHPixiebashComposer จะดาวน์โหลด PHPixie และไลบรารีที่เกี่ยวข้องลงในโฟลเดอร์โปรเจกต์
composer create-project phpixie/project .
1
ตั้งค่า Web Server
ใช้ฟีเจอร์ เว็บไซต์ ของ ServBay เพื่อกำหนดให้ Caddy ชี้ไปยังโปรเจกต์ PHPixie ของคุณและสามารถรันได้
เปิดแอป ServBay
ไปที่เมนู เว็บไซต์ (Websites)
คลิกเพิ่มเว็บไซต์ใหม่
กรอกข้อมูลเว็บไซต์:
- ชื่อ: เช่น
My First PHPixie Dev Site
(เป็นชื่อที่ใช้ภายใน ServBay) - โดเมน: เช่น
servbay-phpixie-test.local
(โดเมนที่จะใช้เข้าผ่านเบราว์เซอร์) - ชนิดเว็บไซต์: เลือก
PHP
- เวอร์ชัน PHP: เลือกตามที่ต้องการ เช่น
8.3
- Root เว็บไซต์ (Document Root): ชี้ไปที่โฟลเดอร์
web
ของโปรเจกต์:/Applications/ServBay/www/servbay-phpixie-app/web
ทำไมต้องใช้โฟลเดอร์
/web
?ไฟล์เริ่มต้นของ PHPixie คือ
web/index.php
ด้วยเหตุผลด้านความปลอดภัยและ Best Practice Root ของ Web Server ควรชี้ตรงไปที่โฟลเดอร์web
(ที่มีไฟล์ entrypoint) เพื่อป้องกันการเข้าถึงไฟล์สำคัญอื่นๆ เช่นไฟล์ 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) { // แสดงผลไฟล์เทมเพลต 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); // เซตข้อมูล key กับ value ได้ 60 วินาที $value = $cache->get('key'); // รับข้อมูลกลับมา return $this->response()->string($value); // ส่งข้อความตอบกลับ } // action ตัวอย่าง Redis public function action_redis(Request $request) { $redis = $this->components->redis(); $redis->set('key', 'Hello Redis from ServBay!'); // เขียนข้อมูลลง Redis $value = $redis->get('key'); // ดึงข้อมูลกลับมา return $this->response()->string($value); // ส่งข้อความตอบกลับ } // action ตัวอย่างเพิ่มผู้ใช้ MySQL/PostgreSQL public function action_add_user(Request $request) { // 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) { // 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สร้างเทมเพลตตัวอย่าง: สร้างไฟล์
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 ถูกต้องไหม (โดยเฉพาะโดเมน ชนิดเว็บ และ root)
- hosts file ในเครื่องแก้ไขให้
servbay-phpixie-test.local
ชี้มายัง localhost แล้วหรือยัง (ServBay จะช่วยจัดการให้อัตโนมัติ) - เวอร์ชัน PHP ที่ต้องการเปิดใช้งานใน ServBay หรือยัง
ตัวอย่างการเชื่อมต่อฐานข้อมูลและแคช
PHPixie รองรับการเชื่อมต่อกับฐานข้อมูลและระบบแคชได้หลากหลาย ServBay ติดตั้ง MySQL, PostgreSQL, Redis, Memcached มาให้พร้อมใช้งานกับโปรเจกต์ PHPixie
หมายเหตุสำคัญ: ก่อนจะใช้งานฐานข้อมูล ต้องแน่ใจว่าบริการฐานข้อมูล (MySQL หรือ PostgreSQL) ถูกสั่งเริ่มแล้วใน ServBay และสร้าง database สำหรับโปรเจกต์นี้ เช่นตัวอย่างในนี้ใช้ชื่อ servbay_phpixie_app
สามารถสร้าง database ผ่านเครื่องมือจัดการฐานข้อมูล (เช่น Sequel Ace, Postico, TablePlus ฯลฯ) หรือ CLI ผู้ใช้ฐานข้อมูลปกติใน ServBay คือ root
รหัสผ่าน password
(โปรดตรวจสอบกับการตั้งค่าของคุณเอง)
กำหนดค่าการเชื่อมต่อฐานข้อมูล
เลือกปรับตามชนิดฐานข้อมูลของคุณ (MySQL หรือ PostgreSQL) แก้ไขไฟล์ assets/config/database.php
ที่ root ของโปรเจกต์ ค่าเริ่มต้น host คือ 127.0.0.1
(localhost)
ตัวอย่างค่าการตั้งค่า MySQL (assets/config/database.php
):
php
<?php
return [
'default' => [
'driver' => 'pdo',
// connection แก้ตามฐานข้อมูลและการตั้งค่าของ ServBay
'connection' => 'mysql:host=127.0.0.1;dbname=servbay_phpixie_app',
'user' => 'root', // user เริ่มต้นของ ServBay
'password' => 'password', // password เริ่มต้น (ต้องตรวจสอบกับค่าจริง)
'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 แก้ตามฐานข้อมูลและการตั้งค่าของ ServBay
'connection' => 'pgsql:host=127.0.0.1;dbname=servbay_phpixie_app',
'user' => 'root', // user เริ่มต้นของ ServBay
'password' => 'password', // password เริ่มต้น (ต้องตรวจสอบกับค่าจริง)
'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 มี CLI สำหรับจัดการการเปลี่ยนแปลงโครงสร้างฐานข้อมูล ("Migration") ซึ่งเหมาะกับการควบคุม version schema
- เปิดเทอร์มินัล: เปลี่ยนที่ทำงานไปโฟลเดอร์โปรเจกต์ของคุณbash
cd /Applications/ServBay/www/servbay-phpixie-app
1 - สร้างไฟล์ migration: ใช้ CLI ของ PHPixie สร้างไฟล์ใหม่สำหรับ migration ตาราง usersbashจะได้ไฟล์ใหม่ใน
php pixie generate:migration create_users_table
1assets/migrations
มีเวลา timestamp ประกอบในชื่อไฟล์ - แก้ไข migration file: เปิดไฟล์ migration ใหม่นี้ (เช่น
YYYY_MM_DD_HHMMSS_create_users_table.php
) แล้วแก้ไขโครงสร้างฟังก์ชันup()
และdown()
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'); // คอลัมน์ไอดี auto-increment $table->string('name'); // คอลัมน์ชื่อ $table->string('email')->unique(); // คอลัมน์อีเมล ต้อง unique $table->timestamps(); // created_at และ updated_at }); } public function down() { // ลบตาราง users ด้วย schema builder $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 ของโปรเจกต์ รันคำสั่งนี้เพื่อสร้างตาราง usersbashหากสำเร็จจะเห็นข้อความแจ้งสำเร็จในเทอร์มินัล และคุณสามารถตรวจสอบให้แน่ใจว่ามีตาราง users จริงโดยเข้าไปที่ฐานข้อมูล
php pixie migrate
1servbay_phpixie_app
ใช้งานฐานข้อมูล (MySQL/PostgreSQL)
Controller ตัวอย่างใน src/App/HTTP/Controller/Home.php
ได้เตรียมฟังก์ชัน action_add_user
และ action_list_users
เพื่อสาธิตการใช้งานกับฐานข้อมูล MySQL หรือ PostgreSQL
- เพิ่มผู้ใช้: เข้าที่
https://servbay-phpixie-test.local/home/add_user
จะเป็นการบันทึกผู้ใช้ใหม่ในตาราง users - ดูรายชื่อผู้ใช้: เข้าที่
https://servbay-phpixie-test.local/home/list_users
จะคืนข้อมูลผู้ใช้ทั้งหมดในแบบ JSON
กำหนดค่าและใช้งานฐานข้อมูล NoSQL (Memcached/Redis)
ServBay ติดตั้ง Memcached และ Redis พร้อม extensions สำหรับ PHP แล้ว คุณแค่ต้องตั้งค่าในโปรเจกต์ PHPixie ให้เรียบร้อย
ตัวอย่าง config Memcached (assets/config/cache.php
):
สร้างหรือแก้ไขไฟล์ assets/config/cache.php
กำหนดค่าตามนี้
php
<?php
return [
'default' => [
'driver' => 'memcached',
'servers' => [
[
'host' => '127.0.0.1', // ที่อยู่ memcached เริ่มต้น
'port' => 11211, // พอร์ต 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
ตัวอย่าง config Redis (assets/config/redis.php
):
สร้างหรือแก้ไขไฟล์ assets/config/redis.php
กำหนดค่าตามนี้
php
<?php
return [
'default' => [
'hostname' => '127.0.0.1', // ที่อยู่ redis เริ่มต้นของ ServBay
'port' => 6379, // พอร์ต 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 ตัวอย่างที่ไฟล์ src/App/HTTP/Controller/Home.php
ได้เตรียมฟังก์ชัน action_memcached
และ action_redis
เพื่อสาธิตการใช้งานแคชทั้งสองแบบ
- ทดสอบ Memcached: ไปที่
https://servbay-phpixie-test.local/home/memcached
ระบบจะเขียนและอ่านค่าผ่าน Memcached ให้ดู - ทดสอบ Redis: ไปที่
https://servbay-phpixie-test.local/home/redis
ระบบจะเขียนและอ่านค่าผ่าน Redis ให้ดู
ทั้งนี้ต้องมั่นใจว่าใน ServBay ได้เปิดใช้งานทั้ง Memcached และ Redis ไว้แล้ว
สรุป
เมื่อทำตามขั้นตอนข้างต้น คุณจะสามารถสร้าง กำหนดค่า และรันโปรเจกต์ PHPixie บน macOS ด้วย ServBay ได้สมบูรณ์ พร้อมใช้งาน Composer, ตั้งค่า Web Server ด้วยฟีเจอร์ เว็บไซต์ ของ ServBay, เชื่อมต่อฐานข้อมูลและแคชแบบ Memcached/Redis แล้วทดสอบฟีเจอร์เหล่านี้ได้ทันที
ServBay ช่วยลดความยุ่งยากในการจัดเตรียมสภาพแวดล้อมพัฒนา PHP ให้คุณสามารถโฟกัสกับโค้ดและงานพัฒนาได้มากขึ้น หวังว่าคู่มือนี้จะช่วยให้คุณเริ่มต้นโปรเจกต์ใหม่ด้วย PHPixie ได้อย่างรวดเร็ว!