การสร้างและรันโปรเจกต์ CakePHP ด้วย ServBay
ServBay คือสภาพแวดล้อมสำหรับการพัฒนาเว็บบน macOS ที่ออกแบบมาโดยเฉพาะ ภายในรวม PHP, Node.js, Python, Go, Java และอีกหลายภาษา รวมทั้งบริการฐานข้อมูล เช่น MySQL, PostgreSQL, MongoDB, Redis พร้อมเซิร์ฟเวอร์เว็บ Caddy หรือ Nginx ให้คุณติดตั้งและบริหารโปรเจกต์ในเครื่องได้ง่ายและรวดเร็ว
บทความนี้จะแนะนำวิธีสร้าง, ตั้งค่า และรันโปรเจกต์ CakePHP ใน ServBay ซึ่ง CakePHP เป็นเฟรมเวิร์ก PHP สำหรับเว็บยอดนิยมที่ใช้โครงสร้าง MVC (โมเดล-วิว-คอนโทรลเลอร์) โดดเด่นด้วยความเร็วในการพัฒนา, ระบบ ORM ที่แข็งแกร่ง และฟีเจอร์ความปลอดภัยในตัว ผนวกกับความสะดวกของ ServBay คุณจะเริ่มโครงการ CakePHP ได้ไวขึ้นมาก
CakePHP คืออะไร?
CakePHP เป็นเฟรมเวิร์กสำหรับการพัฒนาเว็บด้วย PHP แบบโอเพนซอร์ส ที่ให้โครงสร้างพื้นฐานสำหรับสร้างเว็บแอปได้อย่างรวดเร็วและเป็นระบบ โดยไม่สูญเสียความยืดหยุ่น ยึดหลัก "Convention over Configuration" เพื่อลดงานซ้ำ ๆ ในการพัฒนา
ฟีเจอร์และจุดเด่นของ CakePHP
- โครงสร้าง MVC: จัดระเบียบโค้ดชัดเจน ง่ายต่อการดูแลและขยายต่อ
- พัฒนาได้รวดเร็ว: มีเครื่องมือคอมมานด์ไลน์ Bake สำหรับสร้างโค้ดอัตโนมัติ
- ระบบ ORM (Object Relational Mapping): เชื่อมต่อกับฐานข้อมูลหลากหลายแบบได้สะดวก
- ระบบความปลอดภัยในตัว: มี CSRF protection, ป้องกัน SQL Injection, validate ข้อมูล
- เทมเพลตที่ยืดหยุ่น: รองรับหลายเทคโนโลยีฝั่ง view
- คอมมูนิตี้แข็งแกร่งและปลั๊กอินมากมาย: มีตัวช่วยและปลั๊กอินเสริมเพียบ
- เอกสารครบถ้วน: มีไกด์และ API อ้างอิงให้เรียนรู้ใช้งานได้
CakePHP เหมาะกับการสร้างเว็บทุกขนาด ตั้งแต่ API ง่าย ๆ ไปจนถึงระบบสำหรับองค์กรขนาดใหญ่
เตรียมสภาพแวดล้อม CakePHP ด้วย ServBay
ServBay ให้เครื่องมือและบริการที่พร้อมสำหรับการพัฒนา CakePHP ได้แก่
- มี PHP พร้อมส่วนขยายหลัก ที่ติดตั้งไว้แล้ว
- มี Composer สำหรับจัดการ dependencies
- เว็บเซิร์ฟเวอร์ที่ตั้งค่าง่าย (Caddy/Nginx)
- บริการฐานข้อมูล เช่น MySQL, PostgreSQL, Redis
ช่วยตัดปัญหาในการติดตั้งและเซ็ตอัปแต่ละชิ้นส่วนแบบแมนนวล
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น กรุณาตรวจสอบว่า:
- ติดตั้ง ServBay แล้ว: ให้ดาวน์โหลดและติดตั้ง ServBay บน macOS ให้เรียบร้อย
- เปิดใช้งานบริการของ ServBay: เปิดแอป ServBay และตรวจสอบให้แน่ใจว่าบริการที่ต้องการ (PHP, MySQL หรือ PostgreSQL, Redis หรือ Memcached) ทำงานอยู่ ดูในแท็บ "แพ็คเกจ" ของแผงควบคุม ServBay เพื่อจัดการบริการต่าง ๆ
- ชำนาญฟีเจอร์พื้นฐานของ ServBay: ทราบวิธีเพิ่มและตั้งค่าเว็บไซต์ใน ServBay หากคุณยังไม่คุ้นเคย ขอแนะนำให้อ่าน คู่มือเริ่มต้นใช้ ServBay ก่อน
การสร้างโปรเจกต์ CakePHP
ServBay แนะนำให้เก็บโฟลเดอร์โปรเจกต์เว็บไว้ภายใต้ /Applications/ServBay/www
เพื่อให้ ServBay ตรวจเจอและบริหารจัดการเว็บไซต์ของคุณได้อัตโนมัติ
เปิด Terminal
ไปที่แอป Terminal ของ macOS
เปลี่ยนไดเรกทอรีไปยังโฟลเดอร์เว็บไซต์ของ ServBay
ไปยังโฟลเดอร์หลักที่ ServBay แนะนำ:
bashcd /Applications/ServBay/www
1สร้างไดเรกทอรีโปรเจกต์
สร้างโฟลเดอร์ย่อยใหม่สำหรับโปรเจกต์ CakePHP (ตัวอย่างเป็น
servbay-cakephp-app
):bashmkdir servbay-cakephp-app cd servbay-cakephp-app
1
2สร้างโปรเจกต์ CakePHP ด้วย Composer
ServBay ได้ติดตั้ง Composer ไว้แล้ว ใช้ Composer เพื่อสร้างโครงสร้างโปรเจกต์ CakePHP:
bashcomposer create-project --prefer-dist cakephp/app .
1คำสั่งนี้จะติดตั้ง CakePHP เวอร์ชันเสถียรล่าสุดพร้อมกับ dependencies ลงในไดเรกทอรีปัจจุบัน (
.
)ติดตั้งไดรเวอร์ ORM (ถ้าใช้ PostgreSQL)
หากต้องการใช้ PostgreSQL ให้ติดตั้งไดรเวอร์เสริม:
bashcomposer require cakephp/orm-pgsql
1ถ้าใช้ MySQL ไม่ต้องติดตั้งอะไรเพิ่ม เพราะรวมมาใน CakePHP อยู่แล้ว
การตั้งค่าเบื้องต้น
เมื่อสร้างโปรเจกต์แล้ว ต้องตั้งค่าข้อมูลการเชื่อมต่อฐานข้อมูลขั้นพื้นฐาน
ตั้งค่า environment variable และเชื่อมต่อฐานข้อมูล
ค่าคอนฟิกสภาพแวดล้อมโลคอลของ CakePHP อยู่ที่ไฟล์
config/app_local.php
ให้แก้ไขไฟล์นี้ ค้นหาส่วนDatasources
และกรอกข้อมูลเกี่ยวกับฐานข้อมูล (เช่น usernameroot
, passwordpassword
ซึ่งเป็นค่าดีฟอลต์ของ ServBay)ตัวอย่างเซ็ตอัปสำหรับ 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, /** * Set identifier quoting to true if you are using words like "user" as your table name. * But if you are using words like "cake" you can set it to false. * If you don't know use true. */ 'quoteIdentifiers' => false, /** * Current limitations include the following: * - Most drivers do not support setting isolation levels via PDO options. * Using them will result in an error. * - Not all drivers support setting the charset via PDO options. * Using them will result in an error. * - PDO options are not supported for packaged drivers like Postgres from CakePHP. * For Postgres, you only need to set the encoding. */ 'options' => [], //'url' => env('DATABASE_URL', null), // หากคุณใช้ตัวแปรแวดล้อม 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
37
38ปรับ
driver
และport
ตามฐานข้อมูลที่ใช้ และชื่อdatabase
ต้องตรงกับฐานข้อมูลที่คุณจะสร้าง
การตั้งค่าเว็บเซิร์ฟเวอร์ (สร้างเว็บไซต์ใน ServBay)
หากต้องการเปิด CakePHP ผ่านเว็บเบราว์เซอร์ ต้องตั้งค่าเว็บไซต์ใน ServBay ให้ชี้ไปยังโฟลเดอร์โปรเจกต์
เปิดแผงควบคุม ServBay
คลิกที่ไอคอน ServBay เพื่อเปิดแผงควบคุม
ไปที่แท็บ "เว็บไซต์"
ที่แผงควบคุม ServBay ให้เลือก "เว็บไซต์" ใน sidebar
เพิ่มเว็บไซต์ใหม่
คลิกปุ่ม
+
ที่ด้านล่าง เพื่อเพิ่มเว็บไซต์ใหม่ กรอกข้อมูลเหล่านี้:- Name: กำหนดชื่อที่จดจำง่าย เช่น
My CakePHP Dev Site
- Domain: ตั้งโดเมนสำหรับ dev เช่น
servbay-cakephp-test.local
(ServBay จะชี้โดเมนไปโลคอลอัตโนมัติ) - Site Type: เลือก
PHP
- PHP Version: เลือกเวอร์ชันที่เหมาะกับ CakePHP (เช่น CakePHP 4+ ใช้ PHP 7.4+, CakePHP 5+ ใช้ PHP 8.1+ เช่น
8.3
) - Document Root: สำคัญมาก! root ต้องชี้ไปที่
webroot
ของโปรเจกต์ ไม่ใช่โฟลเดอร์โปรเจกต์หลัก เช่น/Applications/ServBay/www/servbay-cakephp-app/webroot
(เปลี่ยนชื่อ directory ตามโปรเจกต์จริงของคุณ)
- Name: กำหนดชื่อที่จดจำง่าย เช่น
บันทึกและใช้การตั้งค่า
เมื่อตั้งค่าครบ คลิก "บันทึก" ที่มุมขวาล่าง และยืนยันเพื่อให้การตั้งค่าทำงาน ServBay จะคอนฟิกเซิร์ฟเวอร์ (Caddy หรือ Nginx) ให้รองรับโดเมน
servbay-cakephp-test.local
และชี้ไปที่โฟลเดอร์webroot
ของโปรเจกต์
สำหรับรายละเอียดเพิ่มเติม ดูเอกสาร ServBay ส่วน เพิ่มเว็บไซต์แรก
ตรวจสอบการตั้งค่าพื้นฐาน
ตอนนี้คุณควรเปิดเว็บผ่านเบราว์เซอร์ที่ตั้งไว้ใน ServBay เช่น https://servbay-cakephp-test.local
ได้แล้ว
หากตั้งค่าทุกอย่างถูกต้อง คุณจะเห็นหน้า welcome ของ CakePHP แสดงว่า PHP, เว็บเซิร์ฟเวอร์ และการคอนฟิกใน ServBay ใช้งานได้เรียบร้อย
การเชื่อมต่อฐานข้อมูลและบริการแคช
CakePHP มาพร้อมระบบ ORM และเลเยอร์แคชที่เชื่อมกับบริการฐานข้อมูลและแคชของ ServBay ได้อย่างง่ายดาย
ตัวอย่างใช้งานฐานข้อมูลเชิงสัมพันธ์ (MySQL / PostgreSQL)
ตัวอย่างนี้จะแสดงการเชื่อม CakePHP กับฐานข้อมูล MySQL หรือ PostgreSQL ของ ServBay สร้างตาราง users
และทำ CRUD ด้วย ORM
สร้างฐานข้อมูลใน ServBay
ก่อนรัน migration ต้องสร้างฐานข้อมูลใหม่ในเซิร์ฟเวอร์ของ ServBay ใช้ phpMyAdmin (MySQL/MariaDB), pgAdmin (PostgreSQL), Navicat, DBeaver ฯลฯ เพื่อเชื่อมต่อ (host:
127.0.0.1
, user:root
, password:password
) แล้วสร้างฐานข้อมูลชื่อservbay_cakephp_app
สร้าง ORM Model
CakePHP ใช้ไฟล์ Model แทนแต่ละตาราง สร้างไฟล์
UsersTable.php
แทนตารางusers
บันทึกโค้ดนี้ใน
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'); // ฟิลด์แสดงผลเริ่มต้นใน association $this->setPrimaryKey('id'); // primary key // ถ้าต้องการ behavior 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ใช้ Bake Tool สร้างไฟล์ Migration
แนะนำให้ใช้ system Migration คุมโครงสร้างฐานข้อมูล ใน root โปรเจกต์ (
/Applications/ServBay/www/servbay-cakephp-app
) ใช้ CakePHP Bake tool สร้าง migration สำหรับตารางusers
:bashbin/cake bake migration CreateUsers name:string email:string:unique
1คำสั่งนี้จะสร้าง migration สำหรับตาราง
users
พร้อมฟิลด์name
(string) และemail
(unique string)รัน Migration
สั่ง migrate สร้างตารางในฐานข้อมูลจริง
bashbin/cake migrations migrate
1หากสำเร็จ คุณจะเห็นตาราง
users
ในฐานข้อมูลตั้งค่าการเชื่อมต่อฐานข้อมูล (ถ้ายังไม่ตั้ง)
ตรวจสอบค่าคอนฟิกใน
config/app_local.php
และกรอกให้ตรงกับฐานข้อมูลและ credential ที่ใช้ตัวอย่าง 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', // ... other config ], ],
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', 'password' => 'password', 'database' => 'servbay_cakephp_app', // ... other config ], ],
1
2
3
4
5
6
7
8
9
10
11
12
เพิ่ม route และเมธอดใน Controller ตัวอย่าง
เพิ่ม routing สำหรับเพิ่ม-ลิสต์ user ใน
config/routes.php
: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) { // ... route อื่น ๆ $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); // ตัวอย่าง route เชื่อมฐานข้อมูล $routes->connect('/db-add-user', ['controller' => 'Pages', 'action' => 'dbAddUser']); $routes->connect('/db-list-users', ['controller' => 'Pages', 'action' => 'dbListUsers']); // ... route อื่น ๆ $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 { // ... display เริ่มต้น 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' => '[email protected]' // อีเมลตัวอย่าง ServBay ]); // ลองบันทึก entity if ($usersTable->save($user)) { return new Response(['body' => 'User added successfully! User ID: ' . $user->id]); } else { // หากไม่สำเร็จ ให้แสดง error $errors = $user->getErrors(); return new Response(['body' => 'Failed to add user. Errors: ' . json_encode($errors)]); } } /** * ตัวอย่างฐานข้อมูล: ลิสต์ผู้ใช้งานทั้งหมด */ public function dbListUsers(): Response { $usersTable = TableRegistry::getTableLocator()->get('Users'); // โหลด Users Table // ค้นหาทุก user $users = $usersTable->find()->all(); // แปลงเป็น JSON เพื่อตอบกลับ return new Response(['body' => json_encode($users->toArray())]); // แปลง Collection เป็น array } }
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 มี API แคชกลางที่สามารถเปลี่ยนแคช backend ได้ เช่น Memcached หรือ Redis ซึ่ง ServBay ติดตั้ง extension เหล่านี้ให้พร้อมใช้งานแล้ว
ก่อนอื่น ตรวจสอบให้แน่ใจว่าได้เปิดใช้บริการ Memcached หรือ Redis ในแท็บ "แพ็คเกจ" ใน ServBay แล้ว
ตั้งค่าการเชื่อมต่อแคช
แก้ไขไฟล์
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'], // ที่อยู่ Memcached ของ ServBay 'prefix' => 'servbay_cakephp_', ], // ... คอนฟิกอื่น ๆ ],
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', 'port' => 6379, 'password' => null, // ระบุถ้ามีรหัสผ่าน 'database' => 0, 'prefix' => 'servbay_cakephp_', ], // ... คอนฟิกอื่น ๆ ],
1
2
3
4
5
6
7
8
9
10
11
12
ตั้งตามบริการแคชที่ใช้งาน
เพิ่ม route และเมธอดใน Controller สำหรับแคช
เพิ่ม routing สำหรับ Memcached/Redis ใน
config/routes.php
:php// config/routes.php // ... route อื่น ๆ $routes->connect('/cache-memcached', ['controller' => 'Pages', 'action' => 'cacheMemcached']); $routes->connect('/cache-redis', ['controller' => 'Pages', 'action' => 'cacheRedis']); // ... route อื่น ๆ
1
2
3
4
5เพิ่มเมธอดสำหรับ Memcached และ Redis ใน
src/Controller/PagesController.php
:php<?php namespace App\Controller; use Cake\Http\Response; use Cake\Cache\Cache; // ใช้งาน Cache class // ... use อื่น ๆ class PagesController extends AppController { // ... เมธอดอื่น ๆ (display, dbAddUser, dbListUsers) /** * ตัวอย่างแคช: Memcached */ public function cacheMemcached(): Response { // ตรวจสอบว่าตั้งค่า default cache ให้ใช้ MemcachedEngine ใน app_local.php แล้ว $cacheKey = 'servbay_memcached_test_key'; $cachedData = Cache::read($cacheKey); $responseBody = ''; if ($cachedData === false) { // ยังไม่มีข้อมูลในแคช $responseBody = 'Cache miss! Writing "Hello Memcached!" to cache.'; $dataToCache = 'Hello Memcached!'; Cache::write($cacheKey, $dataToCache, 'default'); } else { // ข้อมูลอยู่ในแคชแล้ว $responseBody = 'Cache hit! Data from cache: ' . $cachedData; } return new Response(['body' => $responseBody]); } /** * ตัวอย่างแคช: Redis */ public function cacheRedis(): Response { // ตรวจสอบว่าตั้งค่า default cache ให้ใช้ 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ทดสอบฟีเจอร์แคช
เปิดเบราว์เซอร์:
- ถ้าใช้ Memcached ให้ไปที่
https://servbay-cakephp-test.local/cache-memcached
ครั้งแรกจะเห็น "Cache miss" รีเฟรชจะเห็น "Cache hit" - ถ้าใช้ Redis ให้ไปที่
https://servbay-cakephp-test.local/cache-redis
เช่นเดียวกัน
- ถ้าใช้ Memcached ให้ไปที่
แสดงว่าการเชื่อมต่อ CakePHP กับบริการแคชของ ServBay สำเร็จ
ข้อควรระวัง
- ข้อมูลฐานข้อมูล: username/password สำหรับฐานข้อมูลที่ให้มา (
root
/password
) ใช้เฉพาะในการพัฒนาเท่านั้น หากเป็น Production ให้ตั้งค่าความปลอดภัยเอง - Document root: ต้องตั้ง document root ของเว็บไซต์ใน ServBay ให้ชี้ที่ไดเรกทอรี
webroot
ด้านในโปรเจกต์ CakePHP เสมอ ไม่ใช่ root directory ของโปรเจกต์ - เวอร์ชัน PHP: ตรวจสอบว่าเวอร์ชัน PHP ที่เปิดใช้ใน ServBay ตรงกับที่ CakePHP รองรับ (เช็คกับเอกสารหลักของ CakePHP)
- พอร์ตของ ServBay: ถ้าพอร์ตเริ่มต้น (80/443) ถูกโปรแกรมอื่น占用 ให้เปลี่ยนได้ในตั้งค่า ServBay และอาจต้องแก้ไข hosts file หรือใส่พอร์ตตอนเข้าถึง
คำถามที่พบบ่อย (FAQ)
- Q: เข้าหน้า
servbay-cakephp-test.local
แล้วเจอ "Page Not Found"?- A: ตรวจสอบ document root ของเว็บไซต์ใน ServBay ชี้ถูก directory หรือไม่ (
/Applications/ServBay/www/servbay-cakephp-app/webroot
) - ตรวจสอบว่าเว็บเซิร์ฟเวอร์ (Caddy/Nginx) ทำงานอยู่
- ตรวจสอบไฟล์ hosts ของระบบมี mapping
servbay-cakephp-test.local
ไปยัง127.0.0.1
(ServBay มักทำให้เอง แต่ควรเช็คซ้ำ) - เช็คว่าไฟล์
.htaccess
หรือไฟล์คอนฟิกเว็บเซิร์ฟเวอร์ถูกต้องหรือไม่ (โดยทั่วไปwebroot/.htaccess
จาก CakePHP พร้อมใช้งาน)
- A: ตรวจสอบ document root ของเว็บไซต์ใน ServBay ชี้ถูก directory หรือไม่ (
- Q: เชื่อมต่อฐานข้อมูลไม่สำเร็จ?
- A: ตรวจสอบว่าสตาร์ทบริการ MySQL หรือ PostgreSQL ใน ServBay แล้ว
- ตรวจสอบค่าคอนฟิกใน
config/app_local.php
ทั้ง host, port, username, password, database ว่าตรงกับที่ตั้งค่าใน ServBay หรือไม่ - ยืนยันว่ามีฐานข้อมูล
servbay_cakephp_app
อยู่จริง
- Q: ใช้คำสั่ง Composer (
bin/cake
) ไม่ได้?- A: ตรวจสอบว่าอยู่ในโฟลเดอร์ root ของโปรเจกต์ (
/Applications/ServBay/www/servbay-cakephp-app
) - ตรวจสอบว่าบริการ PHP และ Composer เปิดใน ServBay
- เปิด Terminal ที่ ServBay ตั้งค่า PATH ให้ หรือกำหนด PATH เองเพื่อให้เจอคำสั่ง
php
- A: ตรวจสอบว่าอยู่ในโฟลเดอร์ root ของโปรเจกต์ (
สรุป
ServBay ช่วยให้คุณสร้างและตั้งค่าสภาพแวดล้อมสำหรับ CakePHP บน macOS ได้อย่างรวดเร็วและสะดวก มี PHP, Composer, เว็บเซิร์ฟเวอร์, ฐานข้อมูล พร้อมใช้งานในคลิกเดียว ในบทความนี้ได้นำเสนอขั้นตอนการสร้างโปรเจกต์, การตั้งค่าพื้นฐาน, การกำหนดเว็บเซิร์ฟเวอร์, เชื่อมต่อฐานข้อมูลเชิงสัมพันธ์, และบริการแคช ช่วยให้คุณเริ่มต้นการพัฒนาด้วย CakePHP ได้ทันที ด้วย ServBay คุณจะโฟกัสที่ตัวโค้ดเป็นหลัก ลดปัญหายุ่งยากในการตั้งค่าสภาพแวดล้อม