การสร้างและรันโครงการ CakePHP ด้วย ServBay
ServBay คือแพลตฟอร์มสำหรับการพัฒนาเว็บแบบโลคอลที่รองรับทั้ง macOS และ Windows โดยรวมสภาพแวดล้อมสำหรับภาษา PHP, Node.js, Python, Go, Java และให้บริการฐานข้อมูลยอดนิยม เช่น MySQL, PostgreSQL, MongoDB, Redis พร้อมกับเซิร์ฟเวอร์เว็บ (Caddy หรือ Nginx) ที่ตั้งค่าให้พร้อมใช้งานทันที เป็นทางเลือกสำหรับนักพัฒนาที่ต้องการสร้างและจัดการโครงการบนเครื่องของตนอย่างรวดเร็วและมีประสิทธิภาพ
บทความนี้จะอธิบายวิธีสร้าง, ตั้งค่า และรันโครงการ CakePHP ใน ServBay โดย CakePHP เป็นเฟรมเวิร์ก PHP ที่ได้รับความนิยม มีโครงสร้างแบบ MVC (Model-View-Controller) ซึ่งโดดเด่นด้วยความเร็วในการพัฒนา, ระบบ ORM ชั้นนำ และความปลอดภัยที่บิวท์อิน เสริมความสะดวกโดยใช้ ServBay คุณจะเริ่มต้นพัฒนา CakePHP ได้ง่ายขึ้น
CakePHP คืออะไร?
CakePHP เป็นเฟรมเวิร์กโอเพ่นซอร์สสำหรับการสร้างเว็บแอปพลิเคชั่นด้วย PHP โดยมอบโครงสร้างพื้นฐานเพื่อการพัฒนาแอปพลิเคชันเว็บได้อย่างรวดเร็วและมีระเบียบ แต่มิได้ลดทอนความยืดหยุ่น การออกแบบยึดหลัก “การกำหนดค่าด้วยข้อกำหนด” ลดขั้นตอนที่ยุ่งยากในการพัฒนา
จุดเด่นและข้อดีสำคัญของ CakePHP
- โครงสร้าง MVC: แยกส่วนโค้ดอย่างชัดเจน บำรุงรักษาและขยายโครงการได้ง่าย
- พัฒนาได้รวดเร็ว: มีเครื่องมือ CLI (Bake) สำหรับสร้างโค้ดอัตโนมัติ
- ORM ทรงพลัง: ลดความยุ่งยากในการเชื่อมต่อฐานข้อมูล รองรับหลายระบบฐานข้อมูล
- ระบบปลอดภัยบิวท์อิน: มีฟีเจอร์ป้องกัน CSRF, SQL Injection และ วาลิเดชันอินพุต
- ระบบเทมเพลตที่ยืดหยุ่น: รองรับเทคโนโลยีการแสดงผลหลายรูปแบบ
- คอมมูนิตี้แอคทีฟและปลั๊กอินหลากหลาย: แก้ไขปัญหาได้ง่าย มีความสามารถเสริมเพียบ
- เอกสารครบถ้วน: มีคู่มือและ API บรรยายอย่างละเอียด
CakePHP เหมาะกับการสร้างเว็บแอปทุกขนาด ตั้งแต่ API เล็กๆ ไปจนถึงระบบองค์กรที่ซับซ้อน
การเตรียม ServBay สำหรับ CakePHP
ServBay ได้ติดตั้งสิ่งจำเป็นสำหรับพัฒนา CakePHP ไว้ครบ ได้แก่
- PHP interpreter และส่วนเสริมที่นิยม
- Composer สำหรับจัดการแพ็กเกจ PHP
- เว็บเซิร์ฟเวอร์ที่ตั้งค่าง่าย (Caddy/Nginx)
- ฐานข้อมูลครบครัน (MySQL, PostgreSQL, Redis ฯลฯ)
การใช้ ServBay ช่วยลดภาระการติดตั้งและกำหนดค่าสภาพแวดล้อมด้วยตนเองได้อย่างมาก
ข้อกำหนดเบื้องต้น
ตรวจสอบให้แน่ใจว่าคุณได้เตรียมดังนี้ก่อนเริ่มต้น
- ติดตั้ง ServBay: ดาวน์โหลดและติดตั้ง ServBay บน macOS เรียบร้อยแล้ว
- เริ่มบริการ ServBay: เปิดแอป ServBay และตรวจสอบว่าแพ็กเกจที่ต้องใช้ (เช่น PHP, ฐานข้อมูล MySQL หรือ PostgreSQL, บริการแคช Redis หรือ Memcached) ได้เปิดใช้งาน สามารถจัดการบริการเหล่านี้จากแท็บ “แพ็กเกจ” ใน ServBay Control Panel
- คุ้นเคยกับการใช้งานเบื้องต้นของ ServBay: รู้วิธีเพิ่มและตั้งค่าเว็บไซต์ใน ServBay หากยังไม่มั่นใจ แนะนำให้อ่าน คู่มือการใช้งาน ServBay พื้นฐาน
การสร้างโครงการ CakePHP
แนะนำให้จัดเก็บโครงการเว็บไว้ที่ /Applications/ServBay/www เพื่อให้ ServBay ตรวจพบและจัดการเว็บไซต์ได้ง่าย
เปิด Terminal
เปิดแอป Terminal บน macOS
เข้าสู่ไดเรกทอรีหลักของเว็บไซต์ ServBay
ใช้คำสั่งนี้เพื่อไปที่ไดเรกทอรีหลักของเว็บ:
bashcd /Applications/ServBay/www1สร้างโฟลเดอร์โปรเจกต์ใหม่
ตั้งชื่อโฟลเดอร์สำหรับ CakePHP โปรเจกต์ สมมติใช้ชื่อ
servbay-cakephp-app:bashmkdir servbay-cakephp-app cd servbay-cakephp-app1
2สร้างโครงสร้างโปรเจกต์ CakePHP ด้วย Composer
Composer ถูกติดตั้งมากับ ServBay แล้ว รัน Composer ในโฟลเดอร์โปรเจกต์:
bashcomposer create-project --prefer-dist cakephp/app .1คำสั่งนี้จะดาวน์โหลด CakePHP เวอร์ชันเสถียรล่าสุดและติดตั้ง dependencies ทั้งหมดในโฟลเดอร์นี้ (
.)ติดตั้ง ORM Driver สำหรับ PostgreSQL (ถ้าต้องใช้)
ถ้าใช้ฐานข้อมูล PostgreSQL ต้องติดตั้งไดรเวอร์เพิ่ม:
bashcomposer require cakephp/orm-pgsql1สำหรับ MySQL ไม่ต้องติดตั้งเพิ่ม ไดรเวอร์มีมาให้ใน core dependencies ของ CakePHP อยู่แล้ว
ตั้งค่าพื้นฐาน
สร้างโปรเจกต์เสร็จแล้ว ต้องตั้งค่าข้อมูลการเชื่อมต่อฐานข้อมูล
ตั้งค่าสิ่งแวดล้อมและการเชื่อมต่อฐานข้อมูล
ตั้งค่าหลักสำหรับ CakePHP จะอยู่ที่ไฟล์
config/app_local.phpแก้ไขส่วนDatasourcesด้วยข้อมูลเชื่อมต่อฐานข้อมูล โดย ServBay ให้ usernamerootและ passwordpasswordเป็นค่าเริ่มต้นตัวอย่างการเชื่อมต่อ MySQL:
php// config/app_local.php 'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Mysql::class, // หรือ \Cake\Database\Driver\Postgres::class สำหรับ PostgreSQL 'persistent' => false, 'host' => '127.0.0.1', // ที่อยู่เซิร์ฟเวอร์ฐานข้อมูล ServBay เป็นโลคอล //'port' => '3306', // MySQL พอร์ตมาตรฐาน 3306, PostgreSQL มาตรฐาน 5432 'username' => 'root', // ServBay ชื่อผู้ใช้เริ่มต้น 'password' => 'password', // ServBay รหัสผ่านเริ่มต้น 'database' => 'servbay_cakephp_app', // ชื่อฐานข้อมูลที่จะสร้าง 'encoding' => 'utf8mb4', 'timezone' => 'UTC', 'flags' => [], 'cacheMetadata' => true, 'log' => false, /** * ตั้งค่า quote identifiers เป็น true ถ้าใช้คำที่เป็น keyword เช่น "user" เป็นชื่อตาราง * ถ้าใช้คำที่ไม่ใช่ keyword เช่น "cake" ให้กำหนดเป็น false * หากไม่แน่ใจ ให้ใช้ true */ 'quoteIdentifiers' => false, /** * ข้อจำกัดปัจจุบัน ได้แก่: * - ไดรเวอร์ส่วนใหญ่ไม่รองรับการตั้งค่าระดับ isolation จาก PDO options * - ไม่ใช่ทุกไดรเวอร์กำหนด charset ได้จาก PDO options * - PDO options ไม่รองรับกับไดรเวอร์จาก CakePHP ที่ pakage มา (เช่น Postgres) * สำหรับ Postgres เพียงแค่ตั้ง encoding */ 'options' => [], //'url' => env('DATABASE_URL', null), // ถ้าใช้ environment DATABASE_URL ให้เปิดบรรทัดนี้ ], ],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ปรับ
driverและพอร์ตตามประเภทฐานข้อมูลที่ใช้ ชื่อฐานข้อมูลควรตรงกับที่คุณจะสร้างในภายหลัง
การตั้งค่าเว็บเซิร์ฟเวอร์ (เพิ่มเว็บไซต์ใน ServBay)
เพื่อเข้าถึงโปรเจกต์ CakePHP ผ่านเว็บเบราว์เซอร์ ต้องสร้างเว็บไซต์ใหม่ใน ServBay ที่ชี้ไปยังโฟลเดอร์โปรเจกต์ของคุณ
เปิดแผงควบคุม ServBay
คลิกไอคอน ServBay เพื่อเปิด Control Panel
เข้าเมนู “เว็บไซต์”
เลือกแท็บ “เว็บไซต์” จากเมนูด้านซ้าย เดิมเรียกว่า “โฮสต์”
เพิ่มเว็บไซต์ใหม่
คลิกปุ่ม
+ที่ด้านล่างเพื่อเพิ่มเว็บไซต์ใหม่ แล้วกรอกข้อมูลต่อไปนี้:- ชื่อ (Name): ตั้งชื่อเว็บให้จำง่าย เช่น
My CakePHP Dev Site - โดเมน (Domain): กำหนดโดเมนโลคอล เช่น
servbay-cakephp-test.local(ServBay จะชี้ DNS และ hosts ให้โดยอัตโนมัติ) - ชนิดเว็บไซต์ (Site Type): เลือก
PHP - เวอร์ชัน PHP (PHP Version): เลือก PHP ที่เหมาะกับ CakePHP (CakePHP 4+ คือ PHP 7.4+, CakePHP 5+ คือ PHP 8.1+) เช่น
8.3 - รากโฟลเดอร์เว็บไซต์ (Document Root): สำคัญ! เว็บเซิร์ฟเวอร์ควรชี้ไปที่โฟลเดอร์
webrootภายในโปรเจกต์ ไม่ใช่โฟลเดอร์หลัก เช่น/Applications/ServBay/www/servbay-cakephp-app/webroot(ปรับชื่อโฟลเดอร์เป็นโปรเจกต์ของคุณจริง)
- ชื่อ (Name): ตั้งชื่อเว็บให้จำง่าย เช่น
บันทึกและใช้การเปลี่ยนแปลง
เมื่อกรอกข้อมูลครบ กด “บันทึก” ที่มุมล่างขวา ServBay จะถามให้ยืนยันการใช้การเปลี่ยนแปลง จากนั้นจะตั้งค่าเซิร์ฟเวอร์เว็บ (Caddy หรือ Nginx) ให้เชื่อมโยงกับโดเมนโลคอลและชี้ไปยังโฟลเดอร์
webrootของโปรเจกต์คุณแบบอัตโนมัติ
ศึกษาวิธีการอย่างละเอียดจาก การเพิ่มเว็บไซต์แรก
การตรวจสอบการตั้งค่าพื้นฐาน
คุณสามารถเปิดเบราว์เซอร์และเข้าโดเมนที่คุณตั้งไว้ เช่น https://servbay-cakephp-test.local
หากการตั้งค่าทุกส่วนถูกต้อง จะเห็นหน้า Welcome ของ CakePHP แปลว่าสภาพแวดล้อม PHP, เว็บเซิร์ฟเวอร์ และการจัดการเว็บของ ServBay ทำงานปกติ
การเชื่อมต่อฐานข้อมูลและบริการแคช
CakePHP มี ORM และระบบแคชในตัวที่เชื่อมต่อกับบริการฐานข้อมูลและแคชของ ServBay ได้ง่าย
ตัวอย่างการเชื่อมต่อฐานข้อมูล (MySQL / PostgreSQL)
ตัวอย่างนี้จะแสดงวิธีใช้ CakePHP ORM เชื่อมต่อ MySQL หรือ PostgreSQL ใน ServBay สร้างตาราง users และทดลองใช้งาน CRUD (เพิ่ม, ลบ, แก้ไข, ดึงข้อมูล)
สร้างฐานข้อมูลใหม่ใน ServBay
ก่อนทำ Migration ฐานข้อมูล ต้องสร้างฐานข้อมูลใหม่ใน ServBay ใช้เครื่องมือจัดการเช่น phpMyAdmin (MySQL/MariaDB), pgAdmin (PostgreSQL), หรือ Navicat/DBeaver เชื่อมต่อฐานข้อมูลที่
127.0.0.1ด้วย usernamerootและ passwordpasswordจากนั้นสร้างฐานข้อมูลชื่อservbay_cakephp_appสร้างไฟล์ Model สำหรับ ORM
สร้างไฟล์
UsersTable.phpเพื่อแทนตารางusersใน ORMบันทึกโค้ดต่อไปนี้ที่
src/Model/Table/UsersTable.php:php<?php namespace App\Model\Table; use Cake\ORM\Table; use Cake\Validation\Validator; // หากต้องใช้ validation class UsersTable extends Table { /** * Initialize method * * @param array $config The configuration for the Table. * @return void */ public function initialize(array $config): void { parent::initialize($config); $this->setTable('users'); // กำหนดชื่อตารางที่ใช้ $this->setDisplayField('name'); // กำหนดชื่อ field ที่ใช้แสดงผล $this->setPrimaryKey('id'); // กำหนด primary key // หากต้องใช้ระบบ timestamp // $this->addBehavior('Timestamp'); } /** * Default validation rules. * * @param \Cake\Validation\Validator $validator Validator instance. * @return \Cake\Validation\Validator */ public function validationDefault(Validator $validator): Validator { $validator ->scalar('name') ->maxLength('name', 255) ->requirePresence('name', 'create') ->notEmptyString('name'); $validator ->email('email') ->requirePresence('email', 'create') ->notEmptyString('email') ->add('email', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']); // อีเมลต้องไม่ซ้ำกัน return $validator; } }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สร้างไฟล์ Migration ด้วย Bake Tool
ใช้ Bake ของ CakePHP ที่โฟลเดอร์ราก
/Applications/ServBay/www/servbay-cakephp-appเพื่อสร้าง migration สำหรับตารางusers:bashbin/cake bake migration CreateUsers name:string email:string:unique1คำสั่งนี้จะสร้างไฟล์ migration ที่มีโครงสร้างตาราง
usersพร้อมฟิลด์name(string) และemail(string, unique)รัน Migration เพื่อสร้างตารางฐานข้อมูล
รันคำสั่งนี้เพื่อสร้างตาราง users ในฐานข้อมูล:
bashbin/cake migrations migrate1Migration สำเร็จ คุณจะเห็นตาราง
usersในฐานข้อมูลของคุณตั้งค่าการเชื่อมต่อฐานข้อมูล (หากยังไม่ได้ตั้งค่า)
ตรวจสอบว่าใน
config/app_local.phpส่วนDatasources.defaultตั้งค่าตามข้อมูลที่ใช้ตัวอย่าง MySQL:
php'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Mysql::class, 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', // ... การตั้งค่าเพิ่มเติม ], ],1
2
3
4
5
6
7
8
9
10
11ตัวอย่าง PostgreSQL:
php'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Postgres::class, 'host' => '127.0.0.1', // 'port' => '5432', // พอร์ตมาตรฐาน 'username' => 'root', // ServBay user เริ่มต้น 'password' => 'password', // ServBay password เริ่มต้น 'database' => 'servbay_cakephp_app', // ... การตั้งค่าเพิ่มเติม ], ],1
2
3
4
5
6
7
8
9
10
11
12
เพิ่มตัวอย่าง Routing และ Controller Method
เพิ่ม routing ในไฟล์
config/routes.phpสำหรับเพิ่ม/แสดงข้อมูล users:php// config/routes.php use Cake\Routing\RouteBuilder; use Cake\Routing\Router; use Cake\Routing\Route\DashedRoute; Router::defaultRouteClass(DashedRoute::class); Router::scope('/', function (RouteBuilder $routes) { // ... other routes $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); // เพิ่ม routing ตัวอย่างฐานข้อมูล $routes->connect('/db-add-user', ['controller' => 'Pages', 'action' => 'dbAddUser']); $routes->connect('/db-list-users', ['controller' => 'Pages', 'action' => 'dbListUsers']); // ... other routes $routes->fallbacks(DashedRoute::class); });1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18เพิ่มเมธอดสำหรับใช้งานฐานข้อมูลใน
src/Controller/PagesController.php:php<?php namespace App\Controller; use Cake\Http\Response; use Cake\ORM\TableRegistry; use Cake\Datasource\Exception\RecordNotFoundException; // สำหรับกรณีหา record ไม่เจอ class PagesController extends AppController { /** * Displays a view * * @param array ...$path Path segments. * @return \Cake\Http\Response|null */ public function display(...$path): ?Response { // ... เมธอดแสดงผลเริ่มต้น return new Response(['body' => 'Hello ServBay! This is the default page.']); } /** * ตัวอย่างฐานข้อมูล: เพิ่มผู้ใช้ */ public function dbAddUser(): Response { $usersTable = TableRegistry::getTableLocator()->get('Users'); // ดึง Users Table // สร้าง entity ผู้ใช้ใหม่ $user = $usersTable->newEntity([ 'name' => 'ServBay Demo User', 'email' => 'servbay-demo@servbay.test' // อีเมลตัวอย่างสำหรับแบรนด์ ServBay ]); // พยายามบันทึกข้อมูลไปฐานข้อมูล if ($usersTable->save($user)) { return new Response(['body' => 'User added successfully! User ID: ' . $user->id]); } else { // ถ้าบันทึกไม่สำเร็จ อาจเกิดจาก validation หรืออื่นๆ $errors = $user->getErrors(); // รับข้อมูล error ใน validation return new Response(['body' => 'Failed to add user. Errors: ' . json_encode($errors)]); } } /** * ตัวอย่างฐานข้อมูล: แสดงรายการผู้ใช้ทั้งหมด */ public function dbListUsers(): Response { $usersTable = TableRegistry::getTableLocator()->get('Users'); // ดึง Users Table // ดึงข้อมูลผู้ใช้ทั้งหมด $users = $usersTable->find()->all(); // แสดงผลแบบ JSON return new Response(['body' => json_encode($users->toArray())]); // แปลง Collection เป็น array สำหรับ 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ทดลองตัวอย่างฐานข้อมูล
เปิดเบราว์เซอร์:
- เข้า
https://servbay-cakephp-test.local/db-add-userเพื่อเพิ่มผู้ใช้ จะมีข้อความแจ้งสำเร็จ - เข้า
https://servbay-cakephp-test.local/db-list-usersเพื่อดูรายชื่อผู้ใช้ทั้งหมด (จะมีข้อมูลที่เพิ่งเพิ่ม)
- เข้า
ถ้าดำเนินการตามนี้ คุณจะเชื่อม CakePHP กับฐานข้อมูลใน ServBay และได้ใช้งาน ORM แล้ว
ตัวอย่างการใช้แคช (Memcached / Redis)
CakePHP มีระบบแคชที่สามารถเลือกใช้ Memcached หรือ Redis ได้สะดวก ซึ่ง ServBay ก็ติดตั้ง extension PHP สำหรับ Memcached และ Redis กับบริการพร้อมใช้งาน
ตรวจสอบที่แท็บ “แพ็กเกจ” ใน ServBay ว่าเปิดบริการ Memcached หรือ Redis แล้ว
ตั้งค่าสำหรับเชื่อมต่อแคช
แก้ไขไฟล์
config/app_local.phpส่วนCacheเพื่อตั้งค่าสำหรับแคชตัวอย่าง Memcached:
php// config/app_local.php 'Cache' => [ 'default' => [ 'className' => \Cake\Cache\Engine\MemcachedEngine::class, 'servers' => ['127.0.0.1:11211'], // ค่า host+port มาตรฐานของ ServBay 'prefix' => 'servbay_cakephp_', // Prefix key ในแคช ], // ... ค่าแคชอื่นๆ ],1
2
3
4
5
6
7
8
9ตัวอย่าง Redis:
php// config/app_local.php 'Cache' => [ 'default' => [ 'className' => \Cake\Cache\Engine\RedisEngine::class, 'host' => '127.0.0.1', // Host มาตรฐานของ ServBay 'port' => 6379, // พอร์ตมาตรฐานของ Redis 'password' => null, // ใส่ password ถ้าตั้งค่าไว้ 'database' => 0, // ดัชนีฐานข้อมูล Redis 'prefix' => 'servbay_cakephp_', // Prefix key ในแคช ], // ... ค่าแคชอื่นๆ ],1
2
3
4
5
6
7
8
9
10
11
12
เลือกใช้บริการที่คุณต้องการ
เพิ่ม Routing และ Controller สำหรับทดสอบแคช
เพิ่ม routing ใน
config/routes.phpสำหรับใช้แคช:php// config/routes.php // ... other routes $routes->connect('/cache-memcached', ['controller' => 'Pages', 'action' => 'cacheMemcached']); $routes->connect('/cache-redis', ['controller' => 'Pages', 'action' => 'cacheRedis']); // ... other routes1
2
3
4
5เพิ่มเมธอดสำหรับทดสอบแคชใน
src/Controller/PagesController.php:php<?php namespace App\Controller; use Cake\Http\Response; use Cake\Cache\Cache; // import คลาส Cache // ... use อื่นๆ class PagesController extends AppController { // ... เมธอดอื่นๆ (display, dbAddUser, dbListUsers) /** * ตัวอย่างการใช้แคช: Memcached */ public function cacheMemcached(): Response { // ตรวจสอบว่าตั้งค่า 'default' เป็น MemcachedEngine ใน app_local.php $cacheKey = 'servbay_memcached_test_key'; $cachedData = Cache::read($cacheKey); // ลองอ่านจากแคช $responseBody = ''; if ($cachedData === false) { // ไม่พบในแคช (cache miss) $responseBody = 'Cache miss! Writing "Hello Memcached!" to cache.'; $dataToCache = 'Hello Memcached!'; Cache::write($cacheKey, $dataToCache, 'default'); // เขียนข้อมูลไปแคช } else { // พบในแคช (cache hit) $responseBody = 'Cache hit! Data from cache: ' . $cachedData; } return new Response(['body' => $responseBody]); } /** * ตัวอย่างการใช้แคช: Redis */ public function cacheRedis(): Response { // ตรวจสอบว่าตั้งค่า 'default' เป็น RedisEngine ใน app_local.php $cacheKey = 'servbay_redis_test_key'; $cachedData = Cache::read($cacheKey); // ลองอ่านจากแคช $responseBody = ''; if ($cachedData === false) { // ไม่พบในแคช $responseBody = 'Cache miss! Writing "Hello Redis!" to cache.'; $dataToCache = 'Hello Redis!'; Cache::write($cacheKey, $dataToCache, 'default'); // เขียนข้อมูลไปแคช } else { // พบในแคช $responseBody = 'Cache hit! Data from cache: ' . $cachedData; } return new Response(['body' => $responseBody]); } }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ทดสอบการใช้แคช
เปิดเบราว์เซอร์:
- ถ้าใช้ Memcached เข้า
https://servbay-cakephp-test.local/cache-memcachedครั้งแรกจะขึ้น “Cache miss” ครั้งต่อไป “Cache hit” - ถ้าใช้ Redis เข้า
https://servbay-cakephp-test.local/cache-redisครั้งแรกจะขึ้น “Cache miss” ครั้งต่อไป “Cache hit”
- ถ้าใช้ Memcached เข้า
แสดงว่าโปรเจกต์ CakePHP ของคุณเชื่อมต่อแคชจาก ServBay ได้สำเร็จ
หมายเหตุสำคัญ
- ข้อมูลฐานข้อมูล: username/password มาตรฐานของ ServBay (
root/password) ใช้เฉพาะสำหรับพัฒนาโลคอลเท่านั้น ไม่ควรใช้ในโปรดักชั่นจริง - Document Root: กำหนด Document Root ของเว็บไซต์บน ServBay ให้ชี้ไปที่
webrootในโปรเจกต์ CakePHP เสมอ อย่าชี้ไปที่โฟลเดอร์หลัก - เวอร์ชัน PHP: ตรวสอบว่า PHP ที่เลือกใน ServBay ตรงกับ CakePHP ที่ใช้ อ่านเอกสารทางการเพื่อเช็ค requirement
- พอร์ต ServBay: ถ้า ServBay ถูกใช้พอร์ต 80 หรือ 443 แล้ว ต้องไปกำหนดพอร์ตใหม่ และใช้ hosts file หรือพอร์ตที่ระบุในการเข้าถึง
คำถามที่ถามบ่อย (FAQ)
- ถาม: เข้า
servbay-cakephp-test.localแล้วขึ้น "ไม่พบหน้าเว็บ"?- ตอบ: ตรวจสอบ Document Root ของเว็บไซต์ใน ServBay ว่าชี้ไปที่
/Applications/ServBay/www/servbay-cakephp-app/webrootจริง - ตรวจสอบว่า Web Server (Caddy/Nginx) ของ ServBay ทำงานอยู่
- ตรวจสอบ hosts file ว่า
servbay-cakephp-test.localชี้ไปที่127.0.0.1แล้ว (ServBay จัดการให้อัตโนมัติ แต่ควรเช็ค) - ตรวจสอบว่า
.htaccessหรือ config ของเว็บเซิร์ฟเวอร์ CakePHP ถูกต้อง (โดยปกติwebroot/.htaccessถูกต้องอยู่แล้ว)
- ตอบ: ตรวจสอบ Document Root ของเว็บไซต์ใน ServBay ว่าชี้ไปที่
- ถาม: เชื่อมต่อฐานข้อมูลไม่สำเร็จ?
- ตอบ: ตรวจสอบว่าบริการฐานข้อมูล (MySQL/PostgreSQL) ใน ServBay ทำงานอยู่
- ตรวจสอบการตั้งค่า host, port, username, password, database ใน
config/app_local.phpว่าตรงกับที่บริการของ ServBay กำหนด - ตรวจสอบว่าสร้างฐานข้อมูล
servbay_cakephp_appแล้วในเซิร์ฟเวอร์ฐานข้อมูล
- ถาม: รันคำสั่ง Composer (
bin/cake) ไม่ได้?- ตอบ: ตรวจสอบว่าเปิด Terminal ไว้ที่ไดเรกทอรีรากของโปรเจกต์ (
/Applications/ServBay/www/servbay-cakephp-app) - เช็คว่าบริการ PHP และ Composer ใน ServBay เปิดอยู่
- ตรวจสอบว่า terminal หาคำสั่ง
phpได้ (ปกติ ServBay จะตั้ง PATH อัตโนมัติ) อาจลองใช้ terminal ที่รวมใน ServBay หรือกำหนด PATH เอง
- ตอบ: ตรวจสอบว่าเปิด Terminal ไว้ที่ไดเรกทอรีรากของโปรเจกต์ (
สรุป
ด้วย ServBay คุณจะจัดตั้งสภาพแวดล้อมสำหรับพัฒนาโครงการ CakePHP ได้รวดเร็วและมีประสิทธิภาพอย่างมืออาชีพ ไม่ว่าเป็นการกำหนดค่า PHP, Composer, เว็บเซิร์ฟเวอร์, ฐานข้อมูลหรือการเชื่อมต่อแคช ในบทความนี้ ครอบคลุมตั้งแต่สร้างโปรเจกต์ ตั้งค่าพื้นฐาน การจัดการเว็บ การเชื่อมโยงฐานข้อมูลและแคช สามารถเริ่มต้นพัฒนา CakePHP ได้อย่างมั่นใจและปลอดภัย โฟกัสกับการเขียนโค้ด ไม่ต้องพะวงเรื่องการตั้งค่าสภาพแวดล้อม
