การสร้างและรันโปรเจกต์ FuelPHP ในสภาพแวดล้อมพัฒนาแบบ Local ด้วย ServBay
FuelPHP คืออะไร?
FuelPHP เป็นกรอบงาน (framework) PHP ที่มีความยืดหยุ่นและโมดูลาร์ ถูกออกแบบมาเพื่อใช้ในการสร้างเว็บแอปพลิเคชันยุคใหม่ โดยใช้แนวคิดการออกแบบแบบ HMVC (Hierarchical Model-View-Controller) ซึ่งช่วยให้แบ่งสัดส่วนของระบบได้ชัดเจน รวมถึงมีฟีเจอร์และเครื่องมือมากมายเพื่อช่วยให้นักพัฒนาสามารถสร้างเว็บแอปคุณภาพสูงได้อย่างรวดเร็วและมีประสิทธิภาพ ด้วยความยืดหยุ่นสูง ประสิทธิภาพโดดเด่น และความสามารถในการขยายที่ง่าย ทำให้ FuelPHP เป็นหนึ่งในกรอบงาน PHP ที่ได้รับความนิยมสำหรับการพัฒนาเว็บ
จุดเด่นและข้อดีหลักของ FuelPHP
- สถาปัตยกรรม HMVC: รองรับรูปแบบการออกแบบ MVC แบบลำดับชั้น ช่วยจัดระเบียบโค้ด, รีไซเคิลและพัฒนาแบบโมดูลาร์ เหมาะสำหรับโปรเจกต์ขนาดใหญ่หรือมีความซับซ้อน
- ประสิทธิภาพสูง: ถูกออกแบบมาให้เน้นประสิทธิภาพ โดยสามารถจัดการคำร้องขอจำนวนมากและใช้ทรัพยากรได้อย่างมีประสิทธิผล
- ขยายระบบง่าย: มีระบบเสริมแกร่งที่สามารถนำเข้าไลบรารีจากภายนอกหรือเพิ่มฟังก์ชันเองให้เหมาะกับโปรเจกต์เฉพาะได้อย่างรวดเร็ว
- ความปลอดภัย: มาพร้อมฟีเจอร์ป้องกันความปลอดภัยหลายรูปแบบ เช่น การตรวจสอบอินพุตอัตโนมัติ, การกรอง output เพื่อป้องกัน XSS, การป้องกัน CSRF และป้องกัน SQL injection ที่ช่วยสร้างแอปพลิเคชันที่ปลอดภัยยิ่งขึ้น
- ชุมชนสนับสนุนแข็งแกร่ง: มีนักพัฒนาและชุมชนที่ให้ความช่วยเหลืออย่างรวดเร็วพร้อมกับทรัพยากรเสริมจำนวนมาก
ด้วยจุดเด่นเหล่านี้ FuelPHP ช่วยให้นักพัฒนาสามารถสร้างเว็บแอปที่มีประสิทธิภาพสูง ปลอดภัย ดูแลรักษาง่าย ตั้งแต่โปรเจกต์ขนาดเล็กจนถึงโปรเจกต์ระดับองค์กร
ตั้งค่าสภาพแวดล้อม FuelPHP ด้วย ServBay
ServBay เป็นสภาพแวดล้อมพัฒนาเว็บสำหรับนักพัฒนาบนเครื่องแบบครบวงจร ที่ติดตั้งบริการสำคัญสำหรับการพัฒนาไว้ล่วงหน้า เช่น PHP, Caddy/Nginx/Apache, MySQL/PostgreSQL/MongoDB, Redis ฯลฯ ทำให้ไม่ต้องติดตั้งและตั้งค่าเองให้ยุ่งยาก
คู่มือนี้จะเน้นวิธีใช้งาน PHP, เซิร์ฟเวอร์เว็บ (Caddy) รวมถึงบริการฐานข้อมูลและแคชผ่าน ServBay เพื่อสร้างและรันโปรเจกต์ FuelPHP โดยจะใช้ฟังก์ชัน เว็บไซต์ ของ ServBay เพื่อจัดการเซิร์ฟเวอร์เว็บและสามารถเข้าใช้งานและทดสอบโปรเจกต์ได้อย่างรวดเร็ว
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น กรุณาตรวจสอบว่าคุณมีสิ่งต่อไปนี้ครบถ้วน:
- คุณได้ติดตั้งและเปิดใช้ ServBay บน macOS เรียบร้อยแล้ว
- เปิดใช้งาน PHP บน ServBay แล้ว (ServBay จะเปิดใช้งานค่าเริ่มต้นให้อยู่แล้ว)
- เปิดบริการฐานข้อมูล (เช่น MySQL) และระบบแคช (เช่น Redis, Memcached) ที่ต้องใช้บน ServBay เรียบร้อย
- ServBay ติดตั้ง Composer มาให้ในตัว ไม่ต้องติดตั้งเพิ่ม
สร้างโปรเจกต์ FuelPHP
เส้นทางเก็บโปรเจกต์ที่แนะนำ
ServBay แนะนำให้นักพัฒนานำโปรเจกต์เว็บไซต์มาเก็บรวมกันในไดเรกทอรี /Applications/ServBay/www
เพื่อความง่ายในการจัดการและตั้งค่า ตัวอย่างในคู่มือนี้จะใช้ไดเรกทอรีนี้
เปลี่ยนไปยังไดเรกทอรีรากของเว็บไซต์
เปิดโปรแกรมเทอร์มินัล จากนั้นเปลี่ยนไปยังไดเรกทอรีที่แนะนำ:
bashcd /Applications/ServBay/www
1สร้างโฟลเดอร์โปรเจกต์
สร้างโฟลเดอร์ใหม่สำหรับโปรเจกต์ FuelPHP แล้วเข้าไปในโฟลเดอร์นั้น:
bashmkdir servbay-fuelphp-app cd servbay-fuelphp-app
1
2สร้างโปรเจกต์ FuelPHP ด้วย Composer
ใช้ Composer ที่ติดตั้งมากับ ServBay เพื่อดาวน์โหลดและตั้งค่า FuelPHP ในไดเรกทอรีปัจจุบัน (
.
หมายถึงปัจจุบัน):bashcomposer create-project fuel/fuel .
1Composer จะดาวน์โหลด FuelPHP และไลบรารีที่จำเป็นลงในโฟลเดอร์
servbay-fuelphp-app
ตั้งค่าเซิร์ฟเวอร์เว็บ (ด้วยฟังก์ชันเว็บไซต์ของ ServBay)
หากต้องการเข้าใช้งานโปรเจกต์ FuelPHP ผ่านเว็บเบราว์เซอร์ ให้ใช้ฟังก์ชัน เว็บไซต์ ของ ServBay เพื่อสร้าง virtual host ให้กับโปรเจกต์ของคุณ
- เปิดหน้าโปรแกรมหลักของ ServBay
- คลิกเมนู เว็บไซต์ ด้านข้าง
- คลิกปุ่ม เพิ่มเว็บไซต์ ด้านขวาบน
- ในหน้าต่างตั้งค่าที่ขึ้นมา กำหนดข้อมูลดังนี้:
- ชื่อ: ตั้งชื่อที่เข้าใจง่าย เช่น
My First FuelPHP Dev Site
- โดเมน: กำหนดโดเมนสำหรับใช้งาน local เช่น
servbay-fuelphp-test.local
(ServBay จะ map โดเมนนี้ให้อัตโนมัติ) - ประเภทเว็บไซต์: เลือก
PHP
- เวอร์ชัน PHP: เลือกเวอร์ชัน PHP ที่ต้องการใช้ เช่น
8.3
- รากเว็บไซต์: ระบุโฟลเดอร์ที่เป็นจุดเริ่มต้นของไฟล์ FuelPHP โดยควรตั้งรากเว็บไซต์เป็นโฟลเดอร์
public
ในโปรเจกต์:/Applications/ServBay/www/servbay-fuelphp-app/public
- ชื่อ: ตั้งชื่อที่เข้าใจง่าย เช่น
- คลิก เพิ่ม เพื่อบันทึกการตั้งค่า
ServBay จะอัพเดตข้อมูลเซิร์ฟเวอร์ Caddy และรีโหลดบริการให้อัตโนมัติ โดเมนใหม่จะสามารถใช้งานได้ทันที
ดูรายละเอียดขั้นตอนการเพิ่มเว็บไซต์ได้ที่เอกสารของ ServBay การสร้างเว็บไซต์แรก
ตั้งค่าการเชื่อมต่อบริการในโปรเจกต์ FuelPHP
โปรเจกต์ FuelPHP มักจะต้องตั้งค่าการเชื่อมต่อกับฐานข้อมูลและระบบแคช
การตั้งฐานข้อมูล
ไฟล์สำหรับตั้งค่าฐานข้อมูลของ FuelPHP คือ fuel/app/config/development/db.php
ให้แก้ไขไฟล์นี้โดยใช้ข้อมูลเชื่อมต่อของฐานข้อมูลตัวอย่างที่มาพร้อมกับ ServBay (MySQL):
php
<?php
/**
* การตั้งค่าสำหรับฐานข้อมูลที่ใช้ในการพัฒนา จะรวมเข้ากับค่ากลาง
*/
return [
'default' => [
'connection' => [
'dsn' => 'mysql:host=localhost;dbname=fuel_dev', // ตรวจสอบให้มีฐานข้อมูลชื่อ fuel_dev
'username' => 'root', // ผู้ใช้ MySQL เริ่มต้นของ ServBay
'password' => 'root', // รหัสผ่าน MySQL เริ่มต้นของ ServBay (ใช้แค่สำหรับการพัฒนาเครื่อง local)
],
'identifier' => '`', // MySQL ใช้ backtick เป็นตัวล้อมชื่อ table/field
],
];
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
หมายเหตุ:
- คุณต้องสร้างฐานข้อมูลชื่อ
fuel_dev
ด้วยมือผ่านเครื่องมือจัดการฐานข้อมูลของ ServBay (phpMyAdmin หรือ Adminer) ผู้ใช้ MySQL เริ่มต้นคือroot
และรหัสผ่านคือroot
ใช้ได้แค่ในเครื่อง local 'identifier' => '
'` สำคัญกับ MySQL เพื่อให้สามารถอ้างอิงชื่อ table/field ได้ถูกต้อง
การตั้งค่าระบบแคช (Memcached และ Redis)
FuelPHP รองรับหลากหลายแคชไดรเวอร์ ให้ตั้งค่าที่ fuel/app/config/cache.php
ตรวจสอบให้แน่ใจว่า Memcached และ/หรือ Redis บน ServBay ทำงานอยู่
ตั้งค่า Memcached (fuel/app/config/cache.php
):
ถ้าจะใช้ Memcached เป็นค่าตั้งต้น:
php
<?php
return [
'driver' => 'memcached', // กำหนดไดรเวอร์หลักเป็น memcached
'memcached' => [
'cache_id' => 'fuel', // รหัสแคช
'servers' => [
'default' => [
'host' => '127.0.0.1', // ที่อยู่ Memcached
'port' => 11211, // พอร์ตเริ่มต้น Memcached
'weight' => 100,
],
],
'compression' => false, // เปิด/ปิดการบีบอัดข้อมูล
],
// ... การตั้งค่าเกี่ยวกับแคชอื่นๆ
];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PHP บน ServBay ส่วนใหญ่จะติดตั้งส่วนเสริม Memcached ไว้ให้แล้ว
ตั้งค่า Redis (fuel/app/config/redis.php
):
ถ้าจะใช้ Redis ให้ตั้งค่าการเชื่อมต่อในไฟล์ redis.php
:
php
<?php
return [
'default' => [
'hostname' => '127.0.0.1', // ที่อยู่ของ Redis
'port' => 6379, // พอร์ตเริ่มต้น Redis
'database' => 0, // ดัชนีฐานข้อมูล Redis
],
// สามารถเพิ่มการเชื่อมต่อ Redis ได้หลายอัน
];
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
ServBay ติดตั้ง PHP extension สำหรับ Redis ไว้ให้แล้ว
ตัวอย่างบริการฐานข้อมูลและแคช
เพื่อแสดงตัวอย่างการเชื่อมต่อ FuelPHP กับบริการฐานข้อมูลและแคช มาดูตัวอย่างโค้ดด้านล่าง
เตรียมตารางฐานข้อมูล (ใช้ FuelPHP Migrations)
FuelPHP มีเครื่องมือ Oil สำหรับจัดการ migration ฐานข้อมูล (เหมือนระบบ version control สำหรับ schema)
สร้างไฟล์ migration
รันคำสั่งสร้างไฟล์ migration สำหรับตาราง
users
ในโฟลเดอร์โปรเจกต์ (servbay-fuelphp-app
):bashphp oil generate migration create_users_table
1ระบบจะสร้างไฟล์ migration ใหม่ใน
fuel/app/migrations
โดยไฟล์จะมี timestamp กำกับแก้ไขไฟล์ migration
เปิดไฟล์ migration ที่สร้างใหม่ (
fuel/app/migrations/xxxxxxxxxxxx_create_users_table.php
) แล้วระบุโครงสร้างตารางในเมธอดup()
ส่วนdown()
ใช้สำหรับ rollback:php<?php namespace Fuel\Migrations; use Fuel\Core\DBUtil; class Create_users_table { public function up() { // สร้างตาราง users DBUtil::create_table('users', [ 'id' => ['type' => 'int', 'constraint' => 11, 'auto_increment' => true], 'name' => ['type' => 'varchar', 'constraint' => 100], 'email' => ['type' => 'varchar', 'constraint' => 100, 'unique' => true], ], ['id'], true, 'InnoDB', 'utf8mb4_unicode_ci'); // กำหนดคีย์หลัก, เปิดใช้งาน index, กำหนด engine และ charset } public function down() { // ลบตาราง users (rollback) DBUtil::drop_table('users'); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23รัน migration
ใช้เครื่องมือ Oil เพื่อรัน migration เริ่มต้นในโฟลเดอร์โปรเจกต์:
bashphp oil refine migrate
1เมื่อสำเร็จ ตาราง
users
จะถูกสร้างในฐานข้อมูลfuel_dev
เพิ่มโค้ดตัวอย่าง Controller
แก้ไขไฟล์ fuel/app/classes/controller/welcome.php
โดยเพิ่มเมธอดสำหรับสาธิตการใช้งานฐานข้อมูลและแคช:
php
<?php
use Fuel\Core\Controller;
use Fuel\Core\Response;
use Fuel\Core\Cache;
use Fuel\Core\DB; // นำเข้า facade DB
use Fuel\Core\Redis; // นำเข้า facade Redis
class Controller_Welcome extends Controller
{
// เมธอดสำหรับหน้าแรก
public function action_index()
{
return Response::forge('Hello ServBay!');
}
// เมธอดตัวอย่าง Memcached
public function action_memcached()
{
// ลองดึงข้อมูลจากแคช
$value = Cache::get('servbay_memcached_key');
if ($value === false) {
// ถ้าไม่มีข้อมูลในแคช ให้ตั้งค่าใหม่
$value = 'Hello Memcached from ServBay!';
Cache::set('servbay_memcached_key', $value, 60); // แคชไว้ 60 วินาที
$value .= ' (from cache)';
} else {
$value .= ' (cached)';
}
return Response::forge($value);
}
// เมธอดตัวอย่าง Redis
public function action_redis()
{
// ดึงอินสแตนซ์ Redis (การเชื่อมต่อเริ่มต้น)
$redis = \Redis_Db::instance(); // FuelPHP 1.x ใช้ Redis_Db::instance()
// หรือถ้ากำหนดชื่อการเชื่อมต่อหลายตัว ให้ใช้ \Redis_Db::instance('connection_name')
// เซ็ตค่าลง Redis
$redis->set('servbay_redis_key', 'Hello Redis from ServBay!');
// ดึงค่าจาก Redis
$value = $redis->get('servbay_redis_key');
return Response::forge($value);
}
// เมธอดตัวอย่างเขียนข้อมูลลง MySQL
public function action_mysql_add()
{
try {
// แทรกข้อมูลเข้า table users
$result = DB::insert('users')->set([
'name' => 'ServBay Demo User ' . time(), // ใช้เวลาเป็นตัวช่วยให้ข้อมูลไม่ซ้ำ
'email' => 'demo_user_' . time() . '@servbay.test',
])->execute(); // execute() จะคืน array ที่มี ID ของข้อมูลใหม่
return Response::forge('User added with ID: ' . $result[0]);
} catch (\Database_Exception $e) {
// ดักจับ error ฐานข้อมูล เช่น email ซ้ำ
return Response::forge('Error adding user: ' . $e->getMessage(), 500);
}
}
// เมธอดตัวอย่างอ่านข้อมูล MySQL
public function action_mysql()
{
// อ่านข้อมูลทั้งหมดจากตาราง users
$users = DB::select('id', 'name', 'email')->from('users')->execute()->as_array();
// คืนค่าเป็น JSON array
return Response::forge(json_encode($users, JSON_PRETTY_PRINT));
}
}
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
68
69
70
71
72
73
74
75
76
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
68
69
70
71
72
73
74
75
76
หมายเหตุ:
- นำเข้า facade
DB
และRedis
(use Fuel\Core\DB;
,use Fuel\Core\Redis;
) เพื่อเรียกใช้ง่าย - ใช้คีย์ขึ้นต้นด้วย
servbay_
ใน Memcached และ Redis เพื่อป้องกันชนกันกับคีย์อื่น - ตัวอย่างการเขียนข้อมูล MySQL จะเพิ่ม timestamp และจัดการ error แบบพื้นฐาน
- FuelPHP 1.x ใช้
\Redis_Db::instance()
สำหรับดึงอินสแตนซ์ Redis
ตั้งค่าระบบ routing
เพื่อให้สามารถเรียกใช้งาน controller action ที่เพิ่มใหม่จาก URL ได้ ให้กำหนด routing ในไฟล์ fuel/app/config/routes.php
:
php
<?php
return array(
'_root_' => 'welcome/index', // กำหนด route เริ่มต้นไปที่เมธอด index ของ welcome controller
'_404_' => 'welcome/404', // route สำหรับหน้า 404
// route สำหรับฟังก์ชันตัวอย่างใหม่
'memcached' => 'welcome/memcached',
'redis' => 'welcome/redis',
'mysql_add' => 'welcome/mysql_add',
'mysql' => 'welcome/mysql',
// ... routing อื่นๆ
);
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
เข้าถึงและทดสอบเว็บไซต์
ตอนนี้ คุณสามารถเปิดเบราว์เซอร์และเข้าใช้งานโดเมนที่ตั้งไว้บน ServBay เช่น https://servbay-fuelphp-test.local
เพื่อทดสอบโปรเจกต์ FuelPHP และฟังก์ชันการเชื่อมต่อบริการต่างๆ
- เข้าหน้าแรก:
https://servbay-fuelphp-test.local
- ผลลัพธ์ที่คาดหวัง:
Hello ServBay!
- ผลลัพธ์ที่คาดหวัง:
- ทดสอบ Memcached:
https://servbay-fuelphp-test.local/memcached
- ครั้งแรกอาจแสดง:
Hello Memcached from ServBay! (from cache)
(ถ้าบริการแคชทำงาน) - ครั้งต่อไป:
Hello Memcached from ServBay! (cached)
(ถ้ายังไม่หมดอายุ)
- ครั้งแรกอาจแสดง:
- ทดสอบ Redis:
https://servbay-fuelphp-test.local/redis
- ผลลัพธ์ที่คาดหวัง:
Hello Redis from ServBay!
(ถ้า Redis ทำงาน)
- ผลลัพธ์ที่คาดหวัง:
- เพิ่มผู้ใช้ MySQL:
https://servbay-fuelphp-test.local/mysql_add
- ผลลัพธ์ที่คาดหวัง:
User added with ID: [ID ที่เพิ่งเพิ่ม]
(ถ้า MySQL ทำงานและมีฐานข้อมูล/ตาราง)
- ผลลัพธ์ที่คาดหวัง:
- ดูรายการผู้ใช้ MySQL:
https://servbay-fuelphp-test.local/mysql
- ผลลัพธ์ที่คาดหวัง: JSON array แสดงรายชื่อผู้ใช้ทั้งหมดในตาราง
users
(ถ้าตารางมีข้อมูล)
- ผลลัพธ์ที่คาดหวัง: JSON array แสดงรายชื่อผู้ใช้ทั้งหมดในตาราง
เกี่ยวกับ HTTPS: ServBay จะออกใบรับรอง SSL สำหรับเว็บไซต์บน local โดยอัตโนมัติและใช้ ServBay User CA หรือ ServBay Public CA ถ้าหากเบราว์เซอร์แจ้งว่าไม่ไว้วางใจใบรับรอง ให้ตรวจสอบว่าคุณได้ติดตั้งและเชื่อถือ CA บนระบบเรียบร้อย
ข้อควรระวัง
- ตรวจสอบว่าในหน้าหลักของ ServBay บริการที่ใช้ (PHP, Caddy หรือ Nginx/Apache, MySQL, Redis, Memcached) เปิดใช้งานอยู่ทั้งหมด
- สร้างฐานข้อมูล
fuel_dev
ไว้ผ่านเครื่องมือจัดการฐานข้อมูลของ ServBay (หรือกำหนดฐานข้อมูลอื่นที่มีอยู่ในdb.php
) โดย Oil migration จะสร้างตารางในฐานข้อมูลที่ระบุ แต่จะไม่สร้างฐานข้อมูลใหม่ให้อัตโนมัติ - ไฟล์ public entry ของ FuelPHP คือ
public/index.php
ดังนั้นรากเว็บไซต์ใน ServBay ต้อง กำหนดไปที่โฟลเดอร์public
ของโปรเจกต์
สรุป
ServBay ช่วยให้การติดตั้ง FuelPHP เพื่อพัฒนาเว็บแอปบน macOS เป็นเรื่องง่ายมาก คู่มือนี้สอนตั้งแต่การสร้างโปรเจกต์ FuelPHP, ตั้งค่าเซิร์ฟเวอร์ด้วยฟังก์ชัน เว็บไซต์ ของ ServBay, เชื่อมต่อกับบริการฐานข้อมูลและระบบแคช ไปจนถึงการทดสอบด้วยโค้ดตัวอย่าง ServBay มีบริการครบเครื่องและระบบจัดการที่เรียบง่าย ช่วยเพิ่มประสิทธิภาพการพัฒนาอย่างมาก
ขอให้คู่มือนี้ช่วยให้คุณเริ่มต้นพัฒนา FuelPHP กับ ServBay ได้อย่างราบรื่น!