การสร้างและรันโปรเจกต์ FuelPHP ในสภาพแวดล้อมการพัฒนาในเครื่องด้วย ServBay
FuelPHP คืออะไร
FuelPHP คือเฟรมเวิร์ก PHP ที่ยืดหยุ่นและโมดูลาร์ ได้รับการออกแบบมาสำหรับการสร้างเว็บแอปพลิเคชันยุคใหม่ ด้วยรูปแบบการออกแบบแบบ Model-View-Controller แบบลำดับชั้น (HMVC) ซึ่งมาพร้อมฟีเจอร์และเครื่องมือมากมาย ช่วยให้นักพัฒนาสามารถสร้างเว็บแอประดับคุณภาพสูงได้อย่างรวดเร็วและมีประสิทธิภาพ FuelPHP โดดเด่นด้วยความยืดหยุ่นสูง ประสิทธิภาพยอดเยี่ยม และความง่ายในการขยาย จนกลายเป็นเฟรมเวิร์กยอดนิยมของนักพัฒนา PHP จำนวนมาก
จุดเด่นและข้อดีหลักของ FuelPHP
- สถาปัตยกรรม HMVC: รองรับมาตรฐานออกแบบแบบ MVC แบบลำดับชั้น ช่วยในการจัดระเบียบโค้ด การนำกลับมาใช้ซ้ำ และการพัฒนาแบบโมดูล เหมาะกับโครงการขนาดใหญ่หรือซับซ้อน
- ประสิทธิภาพสูง: ออกแบบโดยให้ความสำคัญกับการเพิ่มประสิทธิภาพด้านความเร็วและการใช้ทรัพยากร เหมาะสำหรับรับมือกับปริมาณทราฟฟิกสูงได้อย่างดีเยี่ยม
- ขยายง่าย: เฟรมเวิร์กมีระบบขยายที่แข็งแกร่ง นักพัฒนาเพิ่มไลบรารีภายนอกหรือฟีเจอร์เฉพาะเองได้ง่าย
- ความปลอดภัย: มีระบบความปลอดภัยในตัวหลายรูปแบบ เช่น การตรวจสอบอินพุตอัตโนมัติ การกรองเอาต์พุต (ป้องกัน XSS), การป้องกัน CSRF และการป้องกัน SQL Injection ช่วยให้สร้างแอปพลิเคชันได้อย่างมั่นใจ
- ชุมชนรองรับแข็งแกร่ง: FuelPHP มีชุมชนนักพัฒนาที่กระตือรือร้น คุณสามารถขอความช่วยเหลือหรือหาทรัพยากรเสริมได้อย่างง่ายดาย
ด้วยฟีเจอร์เหล่านี้ FuelPHP จึงเป็นเครื่องมือที่ช่วยนักพัฒนาสร้างเว็บแอปที่มีประสิทธิภาพ ปลอดภัย และดูแลรักษาง่ายได้ทั้งงานเล็กและระดับองค์กร
สร้างสภาพแวดล้อมพัฒนา FuelPHP ด้วย ServBay
ServBay คือสภาพแวดล้อมการพัฒนาเว็บในเครื่องที่ออกแบบมาสำหรับนักพัฒนาโดยเฉพาะ มาพร้อมบริการและเครื่องมือสำคัญ เช่น PHP, Caddy/Nginx/Apache, ฐานข้อมูล MySQL/PostgreSQL/MongoDB, Redis ฯลฯ ให้คุณเริ่มต้นโปรเจกต์ FuelPHP ได้ง่ายโดยไม่ต้องติดตั้งหรือกำหนดค่าขึ้นใหม่ทีละอย่าง
บทแนะนำนี้จะอธิบายการใช้บริการ PHP ของ ServBay, เว็บเซิร์ฟเวอร์ (Caddy), และบริการฐานข้อมูล/แคชสำหรับการสร้างและเปิดใช้งานโปรเจกต์ FuelPHP โดยเราจะใช้ฟีเจอร์ เว็บไซต์ ของ ServBay ในการตั้งค่าเว็บเซิร์ฟเวอร์ และทำให้เข้าถึงโปรเจกต์ของคุณได้อย่างรวดเร็ว
เงื่อนไขเบื้องต้น
ก่อนเริ่มต้น โปรดตรวจสอบว่าคุณมีสิ่งเหล่านี้ครบถ้วน:
- ติดตั้งและเปิดใช้งาน ServBay บน macOS เรียบร้อยแล้ว
- สภาพแวดล้อม PHP ใน ServBay ถูกเปิด (ServBay เปิด PHP ให้อัตโนมัติ)
- ฐานข้อมูลที่คุณตั้งใจจะใช้ (เช่น MySQL) และบริการแคช (เช่น Redis, Memcached) ใน ServBay อยู่ในสถานะเปิดทำงาน
- Composer มีอยู่ใน ServBay แล้วโดยไม่ต้องติดตั้งเพิ่ม
การสร้างโปรเจกต์ FuelPHP
ข้อแนะนำสำหรับที่จัดเก็บโปรเจกต์
ServBay แนะนำให้รวมโปรเจกต์เว็บไซต์ไว้ที่โฟลเดอร์ /Applications/ServBay/www
เพื่อให้ง่ายต่อการจัดการและกำหนดค่า ตัวอย่างในบทความนี้จะใช้โฟลเดอร์นี้เช่นกัน
เปลี่ยนไปโฟลเดอร์รากของเว็บไซต์
เปิด Terminal แล้วเปลี่ยนไปยังโฟลเดอร์รากเว็บไซต์ตามที่ ServBay แนะนำ:
bashcd /Applications/ServBay/www
1สร้างโฟลเดอร์โปรเจกต์
สร้างไดเรกทอรีใหม่สำหรับโปรเจกต์ FuelPHP ของคุณ แล้วเข้าสู่ไดเรกทอรี:
bashmkdir servbay-fuelphp-app cd servbay-fuelphp-app
1
2สร้างโปรเจกต์ FuelPHP ด้วย Composer
ที่ไดเรกทอรีโปรเจกต์ ใช้ Composer ในการดาวน์โหลดและเตรียม FuelPHP เฟรมเวิร์กไว้ในไดเรกทอรีนี้:
bashcomposer create-project fuel/fuel .
1Composer จะดาวน์โหลด FuelPHP เฟรมเวิร์กและ dependency ทั้งหมดไว้ที่โฟลเดอร์
servbay-fuelphp-app
การตั้งค่าเว็บเซิร์ฟเวอร์ (ใช้ฟีเจอร์เว็บไซต์ของ ServBay)
เพื่อให้เข้าถึงโปรเจกต์ FuelPHP ผ่านเบราว์เซอร์ คุณจำเป็นต้องกำหนดค่า virtual host ด้วยฟีเจอร์ เว็บไซต์ ของ ServBay
- เปิดหน้าแรกของโปรแกรม ServBay
- คลิกเมนู เว็บไซต์ ที่แถบข้าง
- คลิกปุ่ม เพิ่มเว็บไซต์ ด้านขวาบน
- กรอกข้อมูลดังนี้:
- ชื่อ: ตั้งชื่อเว็บเพื่อให้ง่ายต่อการจดจำ เช่น
My First FuelPHP Dev Site
- โดเมน: กำหนดโดเมนสำหรับพัฒนาในเครื่อง เช่น
servbay-fuelphp-test.local
(ServBay จะแก้ไข DNS ให้โดยอัตโนมัติ) - ประเภทเว็บไซต์: เลือก
PHP
- เวอร์ชัน PHP: เลือกเวอร์ชันที่คุณต้องการ เช่น
8.3
- ไดเรกทอรีรากของเว็บไซต์: กำหนดเป็นโฟลเดอร์
'public'
ของโปรเจกต์ FuelPHP เนื่องจากไฟล์เข้าเว็บไซต์คือpublic/index.php
ดังนั้นให้ระบุ/Applications/ServBay/www/servbay-fuelphp-app/public
- ชื่อ: ตั้งชื่อเว็บเพื่อให้ง่ายต่อการจดจำ เช่น
- กด เพิ่ม เพื่อบันทึกการตั้งค่า
ServBay จะรีโหลดคอนฟิก Caddy และทำให้โดเมนใหม่ใช้งานได้ทันที
สำหรับขั้นตอนการเพิ่มเว็บไซต์อย่างละเอียด สามารถดูได้ที่เอกสาร ServBay การเพิ่มเว็บไซต์แรก
ตั้งค่าการเชื่อมต่อบริการในโปรเจกต์ FuelPHP
โปรเจกต์ FuelPHP โดยทั่วไปต้องตั้งค่าการเชื่อมต่อฐานข้อมูลและบริการแคช
การตั้งค่าฐานข้อมูล
คอนฟิกฐานข้อมูลของ FuelPHP จะอยู่ที่ไฟล์ fuel/app/config/development/db.php
แก้ไขไฟล์นี้และระบุข้อมูลเชื่อมต่อ โปรดสมมติว่าคุณใช้บริการ MySQL ของ ServBay ตามค่าเริ่มต้น:
php
<?php
/**
* การตั้งค่าฐานข้อมูลสำหรับโหมด development จะถูกรวมกับการตั้งค่า global
*/
return [
'default' => [
'connection' => [
'dsn' => 'mysql:host=localhost;dbname=fuel_dev', // โปรดสร้างฐานข้อมูลชื่อ fuel_dev ล่วงหน้า
'username' => 'root', // ผู้ใช้ MySQL เริ่มต้นของ ServBay
'password' => 'root', // รหัสผ่านเริ่มต้น (สำหรับใช้งานท้องถิ่นเท่านั้น!)
],
'identifier' => '`', // สำหรับ MySQL ต้องใช้ backtick เป็น identifier
],
];
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) โดย user เริ่มต้นคือroot
รหัสผ่านroot
ซึ่งเหมาะสำหรับสภาพแวดล้อมพัฒนาเท่านั้น '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', // ชื่อ cache id
'servers' => [
'default' => [
'host' => '127.0.0.1', // host เริ่มต้นของ Memcached
'port' => 11211, // พอร์ตเริ่มต้น
'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 จะติดตั้ง extension สำหรับ Memcached ไว้แล้ว
ตัวอย่าง Redis (fuel/app/config/redis.php
):
หากใช้ Redis คุณต้องระบุข้อมูลเชื่อมต่อในไฟล์ redis.php
:
php
<?php
return [
'default' => [
'hostname' => '127.0.0.1', // Redis listen ที่ address นี้
'port' => 6379, // พอร์ตเริ่มต้น
'database' => 0, // ดัชนีของ Redis database
],
// สามารถตั้งค่าการเชื่อมต่อหลายชุดได้
];
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
โดยปกติ PHP ของ ServBay ติดตั้ง Redis extension พร้อมแล้ว
ตัวอย่างฐานข้อมูลและบริการแคช
เพื่อสาธิตว่า FuelPHP เชื่อมต่อกับฐานข้อมูลและแคชได้อย่างไร เราจะเพิ่มตัวอย่างโค้ดต่อไปนี้
เตรียมตารางฐานข้อมูล (ใช้ FuelPHP Migrations)
FuelPHP มีเครื่องมือ Oil สำหรับจัดการ migrations (เวอร์ชันคอนโทรลโครงสร้างฐานข้อมูล)
สร้างไฟล์ migration
ที่ไดเรกทอรีโปรเจกต์ (
servbay-fuelphp-app
) ใช้ Oil สร้างไฟล์ migration สำหรับตารางusers
: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'); // ระบุ primary key, เปิดใช้ 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
ที่โฟลเดอร์โปรเจกต์ (
servbay-fuelphp-app
) ใช้ Oil เพื่อ apply 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; // นำเข้า DB facade
use Fuel\Core\Redis; // นำเข้า Redis facade
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()
{
// ได้ instance ของ 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 {
// เพิ่มข้อมูลลงตาราง users
$result = DB::insert('users')->set([
'name' => 'ServBay Demo User ' . time(), // ใช้ timestamp เพื่อไม่ซ้ำ
'email' => 'demo_user_' . time() . '@servbay.test',
])->execute(); // execute() จะคืน array ที่มี id ล่าสุด
return Response::forge('User added with ID: ' . $result[0]);
} catch (\Database_Exception $e) {
// จับข้อผิดพลาดฐานข้อมูล เช่น email ซ้ำ
return Response::forge('Error adding user: ' . $e->getMessage(), 500);
}
}
// ตัวอย่างอ่านข้อมูลจาก MySQL
public function action_mysql()
{
// ดึงข้อมูลจาก users table
$users = DB::select('id', 'name', 'email')->from('users')->execute()->as_array();
// ส่งคืนเป็น JSON
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
หมายเหตุ:
- มีการนำเข้า
DB
กับRedis
(โดยใช้use Fuel\Core\DB;
,use Fuel\Core\Redis;
) เพื่อเรียกใช้ได้ทันที - key ของ Memcached กับ Redis ใช้คำนำหน้า
servbay_
เพื่อป้องกันชนกันกับ key อื่น - ตัวอย่าง insert MySQL มี timestamp, การจัดการ error, และข้อความสาธิตที่ดูเป็นจริง
- สำหรับ FuelPHP 1.x ให้ใช้
\Redis_Db::instance()
เมื่อเชื่อมต่อ Redis
ตั้งค่า routes
เพื่อให้คุณเข้าถึง action ใหม่ ๆ ได้จาก URL คุณต้องกำหนด route ใน fuel/app/config/routes.php
เพิ่มหรือแก้ไข array ที่ return ดังนี้:
php
<?php
return array(
'_root_' => 'welcome/index', // route เริ่มต้นชี้ไปที่ action index ของ welcome
'_404_' => 'welcome/404', // กำหนดหน้า 404
// routes สำหรับ action ตัวอย่าง
'memcached' => 'welcome/memcached',
'redis' => 'welcome/redis',
'mysql_add' => 'welcome/mysql_add',
'mysql' => 'welcome/mysql',
// ... routes อื่น ๆ ตามต้องการ
);
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 รายชื่อผู้ใช้จากตาราง (หาก MySQL ทำงานและมีข้อมูล)
เกี่ยวกับ HTTPS: ServBay จะตั้งค่า SSL certificate ให้เว็บไซต์อัตโนมัติและเชื่อถือได้ผ่าน ServBay User CA หรือ ServBay Public CA หากเบราว์เซอร์ฟ้องว่าใบรับรองไม่ปลอดภัย ให้ติดตั้ง ServBay CA ไว้ในระบบด้วย
ข้อควรสังเกต
- ตรวจสอบให้แน่ใจว่าบริการที่ต้องใช้ เช่น PHP, Caddy (หรือ Nginx/Apache), MySQL, Redis, Memcached ใน ServBay อยู่ในสถานะ กำลังทำงาน
- ต้องสร้างฐานข้อมูล
fuel_dev
ด้วยเครื่องมือจัดการของ ServBay เอง ก่อนรัน migration (migration จะสร้าง table ไม่ได้สร้างฐานข้อมูล) - ไฟล์เข้าใช้ FuelPHP คือ
public/index.php
ดังนั้นต้องตั้ง Website root ให้ตรงกับโฟลเดอร์public
เสมอ
สรุป
ด้วย ServBay คุณจะตั้งค่าสภาพแวดล้อมพัฒนาโปรเจกต์ FuelPHP ใน macOS ได้อย่างรวดเร็ว บทความนี้อธิบายขั้นตอนสร้างโปรเจกต์ การตั้งค่าเว็บไซต์ผ่าน ServBay การเชื่อมต่อกับฐานข้อมูลและบริการแคช รวมถึงแนวทางตรวจสอบแต่ละฟีเจอร์ ด้วยบริการที่รวมมาให้และขั้นตอนที่ง่ายกว่าเดิม ServBay จะช่วยเพิ่มประสิทธิภาพการพัฒนาโปรเจกต์ของคุณอย่างมาก
หวังว่าคู่มือนี้จะช่วยให้คุณเริ่มต้นพัฒนา FuelPHP กับ ServBay ได้อย่างราบรื่น!