Tạo và chạy dự án CakePHP với ServBay
ServBay là một môi trường phát triển web cục bộ hiện đại hỗ trợ macOS và Windows, tích hợp nhiều ngôn ngữ như PHP, Node.js, Python, Go, Java cùng các dịch vụ cơ sở dữ liệu như MySQL, PostgreSQL, MongoDB, Redis..., và kết hợp với máy chủ web Caddy hoặc Nginx. Nền tảng này giúp lập trình viên dễ dàng xây dựng, quản lý dự án cục bộ một cách nhanh chóng và hiệu quả.
Bài viết này hướng dẫn bạn chi tiết cách tạo, cấu hình và khởi chạy một dự án CakePHP trong môi trường ServBay. CakePHP là framework PHP phổ biến, tuân thủ mô hình MVC (Model-View-Controller), nổi bật với khả năng phát triển nhanh, ORM mạnh mẽ và các tính năng bảo mật tích hợp. Kết hợp với sự tiện lợi của ServBay, bạn có thể bắt đầu phát triển CakePHP một cách nhanh chóng.
CakePHP là gì?
CakePHP là một framework phát triển ứng dụng web mã nguồn mở sử dụng PHP, cung cấp cấu trúc nền tảng giúp xây dựng ứng dụng web một cách nhanh chóng và có tổ chức mà không làm giảm sự linh hoạt. Dựa trên triết lý "ưu tiên quy ước hơn cấu hình", CakePHP đơn giản hóa nhiều nhiệm vụ phát triển thường gặp.
Điểm mạnh và lợi ích của CakePHP
- Dựa trên mô hình MVC: Tổ chức mã nguồn rõ ràng, dễ bảo trì và mở rộng.
- Phát triển nhanh: Công cụ dòng lệnh (Bake) hỗ trợ sinh mã tự động, rút ngắn thời gian phát triển.
- ORM mạnh mẽ (Object Relational Mapping): Đơn giản hóa thao tác với cơ sở dữ liệu, hỗ trợ nhiều loại CSDL.
- Bảo mật tích hợp: Tích hợp chống CSRF, chống SQL Injection, xác thực đầu vào...
- Engine template linh hoạt: Hỗ trợ nhiều công nghệ hiển thị phía view.
- Cộng đồng lớn, nhiều plugin: Dễ dàng nhận được hỗ trợ và mở rộng tính năng.
- Tài liệu đầy đủ: Có hướng dẫn chi tiết và tham khảo API toàn diện.
CakePHP phù hợp cả với ứng dụng web quy mô nhỏ lẫn hệ thống lớn, từ API đơn giản tới doanh nghiệp phức tạp.
Xây dựng môi trường phát triển CakePHP với ServBay
ServBay cung cấp môi trường tích hợp thuận tiện cho phát triển CakePHP, gồm:
- Sẵn sàng các trình thông dịch PHP và extension thường dùng.
- Có sẵn trình quản lý gói Composer.
- Dễ dàng cấu hình máy chủ web (Caddy/Nginx).
- Tích hợp dịch vụ cơ sở dữ liệu (MySQL, PostgreSQL, Redis...).
Nhờ ServBay, bạn sẽ không phải thao tác thủ công và cấu hình rườm rà các thành phần này.
Điều kiện tiên quyết
Trước khi bắt đầu, hãy hoàn thành các bước sau:
- Cài đặt ServBay: Đảm bảo bạn đã tải và cài đặt ServBay thành công trên macOS.
- Khởi chạy dịch vụ ServBay: Mở ứng dụng ServBay, đảm bảo các package cần thiết (ví dụ PHP, cơ sở dữ liệu bạn chọn như MySQL hoặc PostgreSQL, cùng dịch vụ cache như Redis hoặc Memcached) đã được kích hoạt. Bạn có thể quản lý các dịch vụ này ở tab "Package" trong bảng điều khiển ServBay.
- Làm quen thao tác cơ bản trên ServBay: Biết cách thêm/cấu hình website bằng ServBay. Nếu chưa rõ, nên tham khảo Hướng dẫn sử dụng cơ bản ServBay.
Tạo dự án CakePHP
ServBay khuyến nghị bạn đặt tất cả file dự án web vào thư mục /Applications/ServBay/www
để dễ dàng quản lý và nhận diện website trên nền tảng này.
Mở Terminal
Mở ứng dụng Terminal trên macOS.
Di chuyển tới thư mục gốc website ServBay
Chuyển vào thư mục nơi lưu các website của ServBay:
bashcd /Applications/ServBay/www
1Tạo thư mục dự án
Tạo một folder cho dự án CakePHP. Ví dụ đặt tên là
servbay-cakephp-app
:bashmkdir servbay-cakephp-app cd servbay-cakephp-app
1
2Dùng Composer để tạo khung dự án CakePHP
Composer đã có sẵn trong ServBay. Tại thư mục dự án, dùng Composer để tạo dự án CakePHP mới:
bashcomposer create-project --prefer-dist cakephp/app .
1Lệnh này sẽ tải phiên bản CakePHP mới nhất cùng các phụ thuộc về thư mục hiện tại (
.
).Cài driver ORM (nếu dùng PostgreSQL)
Nếu bạn dùng cơ sở dữ liệu PostgreSQL, cần cài thêm driver ORM cho PostgreSQL:
bashcomposer require cakephp/orm-pgsql
1Nếu dùng MySQL, driver này đã có sẵn trong các phụ thuộc mặc định.
Thiết lập cấu hình ban đầu
Sau khi tạo dự án, bạn cần cấu hình một số thông số cơ bản, đặc biệt là kết nối cơ sở dữ liệu.
Cấu hình biến môi trường và kết nối database
Cấu hình môi trường cho CakePHP chủ yếu chỉnh trong file
config/app_local.php
. Mở file này, tìm phầnDatasources
để nhập thông tin kết nối database. Thông thường, username mặc định của ServBay làroot
, password làpassword
.Ví dụ cấu hình kết nối MySQL:
php// config/app_local.php 'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Mysql::class, // hoặc \Cake\Database\Driver\Postgres::class nếu dùng PostgreSQL 'persistent' => false, 'host' => '127.0.0.1', // Địa chỉ máy chủ CSDL, mặc định ServBay là localhost //'port' => '3306', // MySQL mặc định là 3306, PostgreSQL là 5432 'username' => 'root', // Tài khoản mặc định 'password' => 'password', // Mật khẩu mặc định 'database' => 'servbay_cakephp_app', // Tên database bạn sẽ tạo 'encoding' => 'utf8mb4', 'timezone' => 'UTC', 'flags' => [], 'cacheMetadata' => true, 'log' => false, /** * Đặt quoteIdentifiers=true nếu bạn dùng tên bảng là các từ đặc biệt (ví dụ "user"). * Nếu dùng tên bình thường (như "cake"), có thể đặt là false. * Không chắc thì đặt true. */ 'quoteIdentifiers' => false, /** * Một số hạn chế hiện có: * - Đa số driver không hỗ trợ thiết lập isolation level qua tùy chọn PDO. * - Không phải driver nào cũng hỗ trợ thay đổi charset qua tùy chọn PDO. * - Tùy chọn PDO không dùng được cho các driver đóng gói như Postgres CakePHP. * - Với Postgres, chỉ cần đặt encoding. */ 'options' => [], //'url' => env('DATABASE_URL', null), // Nếu dùng biến môi trường DATABASE_URL, có thể bật dòng này ], ],
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
36Hãy điều chỉnh lại thông số
driver
,port
... sao cho đúng với loại CSDL bạn dùng (MySQL hay PostgreSQL) và tên database bạn đã/định tạo.
Cấu hình máy chủ web (tạo website trên ServBay)
Để truy cập dự án CakePHP từ trình duyệt, bạn cần cấu hình website trong ServBay trỏ tới thư mục dự án.
Mở bảng điều khiển ServBay
Click vào biểu tượng ServBay để mở dashboard.
Vào tab "Website"
Trong bảng điều khiển, chọn mục "Website" ở menu bên trái (trước gọi là "Host").
Thêm website mới
Click nút
+
để thêm website. Nhập thông tin như sau:- Tên (Name): Đặt tên dễ nhận diện, ví dụ
My CakePHP Dev Site
. - Tên miền (Domain): Đặt tên miền phát triển cục bộ, ví dụ
servbay-cakephp-test.local
. ServBay sẽ tự động trỏ tới localhost. - Loại website (Site Type): Chọn
PHP
. - Phiên bản PHP (PHP Version): Chọn phiên bản phù hợp với CakePHP (CakePHP 4+ thường dùng PHP 7.4+, CakePHP 5+ dùng PHP 8.1+ trở lên, ví dụ chọn
8.3
). - Thư mục root website (Document Root): Chú ý! Thư mục gốc web server của CakePHP là thư mục
webroot
nằm trong dự án, không phải thư mục dự án chính. Đặt là/Applications/ServBay/www/servbay-cakephp-app/webroot
(thayservbay-cakephp-app
bằng tên dự án thực tế của bạn).
- Tên (Name): Đặt tên dễ nhận diện, ví dụ
Lưu và áp dụng thay đổi
Sau khi nhập xong, nhấn "Lưu". ServBay sẽ hỏi xác nhận, bạn bấm đồng ý. Khi đó, hệ thống sẽ tự động cấu hình máy chủ web (Caddy hoặc Nginx) để phản hồi tên miền
servbay-cakephp-test.local
và trỏ tới thư mụcwebroot
của dự án.
Chi tiết các bước thêm website có trong tài liệu ServBay, phần Thêm website đầu tiên.
Kiểm tra cài đặt cơ bản
Bây giờ, bạn có thể mở trình duyệt truy cập website mình vừa tạo.
Truy cập đường dẫn tên miền bạn đã cấu hình (ví dụ https://servbay-cakephp-test.local
).
Nếu mọi cấu hình đúng, bạn sẽ thấy trang chào mừng mặc định của CakePHP. Điều này nghĩa là môi trường PHP, máy chủ web, cấu hình website ServBay đã OK.
Tích hợp cơ sở dữ liệu và dịch vụ cache
CakePHP có ORM mạnh và lớp trừu tượng cache, cho phép dễ dàng kết nối với các dịch vụ database và cache ServBay cung cấp.
Ví dụ về cơ sở dữ liệu quan hệ (MySQL / PostgreSQL)
Ví dụ này hướng dẫn bạn dùng ORM của CakePHP để kết nối với MySQL/PostgreSQL từ ServBay, tạo bảng users
, thực hiện thao tác thêm/xóa/sửa/lấy dữ liệu.
Tạo database trên ServBay
Trước khi migrate, bạn cần tạo database mới trên hệ quản trị cơ sở dữ liệu của ServBay. Sử dụng công cụ quản lý database của ServBay (phpMyAdmin cho MySQL/MariaDB, pgAdmin cho PostgreSQL hoặc phần mềm như Navicat/DBeaver), kết nối tới địa chỉ (thường là
127.0.0.1
, userroot
, passwordpassword
), sau đó tạo database tênservbay_cakephp_app
.Tạo file model ORM
ORM CakePHP yêu cầu tạo model đại diện bảng database. Tạo file
UsersTable.php
cho bảngusers
.Lưu mã sau vào
src/Model/Table/UsersTable.php
:php<?php namespace App\Model\Table; use Cake\ORM\Table; use Cake\Validation\Validator; // Nếu cần khai báo validation class UsersTable extends Table { /** * Phương thức khởi tạo * * @param array $config Cấu hình cho Table. * @return void */ public function initialize(array $config): void { parent::initialize($config); $this->setTable('users'); // Đặt rõ tên bảng tương ứng $this->setDisplayField('name'); // Trường dùng khi liên kết, hiển thị mặc định $this->setPrimaryKey('id'); // Đặt khóa chính // Nếu cần tự động cập nhật timestamp // $this->addBehavior('Timestamp'); } /** * Quy tắc validation mặc định. * * @param \Cake\Validation\Validator $validator Đối tượng validator. * @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']); // Đảm bảo email duy nhất 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
49Dùng Bake tool tạo file migration
CakePHP khuyến nghị quản lý cấu trúc CSDL bằng migration. Ở thư mục gốc dự án (
/Applications/ServBay/www/servbay-cakephp-app
), dùng Bake để tạo migration cho bảngusers
:bashbin/cake bake migration CreateUsers name:string email:string:unique
1Lệnh tạo file migration mới, với bảng
users
gồm trườngname
(kiểu string) vàemail
(string, unique).Chạy migrate để tạo bảng CSDL
Chạy migrate để xây dựng bảng
users
trên database vừa tạo:bashbin/cake migrations migrate
1Nếu thành công, bạn sẽ thấy bảng
users
trong database.Kiểm tra lại kết nối database (nếu chưa cấu hình ở trên)
Đảm bảo phần
Datasources.default
trongconfig/app_local.php
có thông số đúng với loại database, user, password...Cấu hình 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', // ... các thông số khác ], ],
1
2
3
4
5
6
7
8
9
10
11Cấu hình PostgreSQL:
php'Datasources' => [ 'default' => [ 'className' => \Cake\Database\Connection::class, 'driver' => \Cake\Database\Driver\Postgres::class, 'host' => '127.0.0.1', // 'port' => '5432', // port mặc định 'username' => 'root', // user mặc định của ServBay 'password' => 'password', // password mặc định của ServBay 'database' => 'servbay_cakephp_app', // ... các thông số khác ], ],
1
2
3
4
5
6
7
8
9
10
11
12
Thêm route và phương thức controller ví dụ
Sửa file
config/routes.php
để thêm route thao tác với dữ liệu: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) { // ... các route khác $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); // Route ví dụ thao tác database $routes->connect('/db-add-user', ['controller' => 'Pages', 'action' => 'dbAddUser']); $routes->connect('/db-list-users', ['controller' => 'Pages', 'action' => 'dbListUsers']); // ... các route khác $routes->fallbacks(DashedRoute::class); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Sửa file
src/Controller/PagesController.php
để thêm phương thức thao tác dữ liệu:php<?php namespace App\Controller; use Cake\Http\Response; use Cake\ORM\TableRegistry; use Cake\Datasource\Exception\RecordNotFoundException; // Xử lý trường hợp không tìm thấy dữ liệu class PagesController extends AppController { /** * Hiển thị view * * @param array ...$path Các segment của đường dẫn. * @return \Cake\Http\Response|null */ public function display(...$path): ?Response { // ... method display mặc định return new Response(['body' => 'Hello ServBay! Đây là trang mặc định.']); } /** * Ví dụ database: thêm user */ public function dbAddUser(): Response { $usersTable = TableRegistry::getTableLocator()->get('Users'); // Lấy instance bảng Users // Tạo entity user mới $user = $usersTable->newEntity([ 'name' => 'ServBay Demo User', 'email' => 'servbay-demo@servbay.test' // Sử dụng email ví dụ ServBay ]); // Lưu entity vào database if ($usersTable->save($user)) { return new Response(['body' => 'Thêm user thành công! ID: ' . $user->id]); } else { // Nếu lưu thất bại, có thể do validation... $errors = $user->getErrors(); // Lấy lỗi validate return new Response(['body' => 'Thêm user thất bại. Lỗi: ' . json_encode($errors)]); } } /** * Ví dụ database: liệt kê user */ public function dbListUsers(): Response { $usersTable = TableRegistry::getTableLocator()->get('Users'); // Lấy instance bảng Users // Tìm tất cả user $users = $usersTable->find()->all(); // Xuất kết quả kiểu JSON return new Response(['body' => json_encode($users->toArray())]); // Chuyển collection thành mảng } }
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
58Truy cập thao tác với database
Mở trình duyệt:
- Truy cập
https://servbay-cakephp-test.local/db-add-user
để thêm user. Bạn sẽ nhận thông báo thành công. - Vào
https://servbay-cakephp-test.local/db-list-users
để xem danh sách user hiện có (sẽ chứa user vừa thêm).
- Truy cập
Sau các thao tác trên, bạn đã kết nối CakePHP với database quan hệ của ServBay và thực hiện thành công các thao tác ORM cơ bản.
Ví dụ dịch vụ cache (Memcached / Redis)
CakePHP cung cấp API cache hợp nhất, dễ dàng chuyển đổi qua lại giữa các engine như Memcached và Redis. ServBay cài sẵn extension PHP cho Memcached/Redis, đồng thời cung cấp dịch vụ tương ứng.
Đầu tiên, đảm bảo bạn đã khởi động dịch vụ Memcached hoặc Redis ở tab "Package" trong bảng điều khiển ServBay.
Cấu hình cache
Sửa file
config/app_local.php
, phầnCache
, cấu hình kết nối cache.Cấu hình Memcached:
php// config/app_local.php 'Cache' => [ 'default' => [ 'className' => \Cake\Cache\Engine\MemcachedEngine::class, 'servers' => ['127.0.0.1:11211'], // Địa chỉ và port mặc định của ServBay 'prefix' => 'servbay_cakephp_', // Tiền tố key cache ], // ... các cache khác ],
1
2
3
4
5
6
7
8
9Cấu hình Redis:
php// config/app_local.php 'Cache' => [ 'default' => [ 'className' => \Cake\Cache\Engine\RedisEngine::class, 'host' => '127.0.0.1', // Địa chỉ Redis của ServBay 'port' => 6379, // Port mặc định 'password' => null, // Nếu Redis có mật khẩu thì nhập vào đây 'database' => 0, // Redis index database 'prefix' => 'servbay_cakephp_', // Tiền tố key cache ], // ... các cache khác ],
1
2
3
4
5
6
7
8
9
10
11
12
Chọn mục cache phù hợp với dịch vụ mình dùng.
Thêm route và controller phương thức ví dụ
Sửa file
config/routes.php
để thêm route cache:php// config/routes.php // ... các route khác $routes->connect('/cache-memcached', ['controller' => 'Pages', 'action' => 'cacheMemcached']); $routes->connect('/cache-redis', ['controller' => 'Pages', 'action' => 'cacheRedis']); // ... các route khác
1
2
3
4
5Sửa file
src/Controller/PagesController.php
để thêm phương thức sử dụng cache:php<?php namespace App\Controller; use Cake\Http\Response; use Cake\Cache\Cache; // Import Cache // ... các use khác class PagesController extends AppController { // ... các method khác (display, dbAddUser, dbListUsers) /** * Ví dụ cache: Memcached */ public function cacheMemcached(): Response { // Đảm bảo 'default' cache đã dùng MemcachedEngine trong app_local.php $cacheKey = 'servbay_memcached_test_key'; $cachedData = Cache::read($cacheKey); // Cố gắng lấy dữ liệu từ cache $responseBody = ''; if ($cachedData === false) { // Không có cache $responseBody = 'Cache chưa có! Đang ghi "Hello Memcached!" vào cache.'; $dataToCache = 'Hello Memcached!'; Cache::write($cacheKey, $dataToCache, 'default'); // Ghi dữ liệu vào cache 'default' } else { // Đã có cache $responseBody = 'Đã lấy từ cache: ' . $cachedData; } return new Response(['body' => $responseBody]); } /** * Ví dụ cache: Redis */ public function cacheRedis(): Response { // Đảm bảo 'default' cache đã dùng RedisEngine trong app_local.php $cacheKey = 'servbay_redis_test_key'; $cachedData = Cache::read($cacheKey); // Lấy dữ liệu từ cache $responseBody = ''; if ($cachedData === false) { // Chưa có cache $responseBody = 'Cache chưa có! Đang ghi "Hello Redis!" vào cache.'; $dataToCache = 'Hello Redis!'; Cache::write($cacheKey, $dataToCache, 'default'); // Ghi dữ liệu vào cache 'default' } else { // Đã có cache $responseBody = 'Đã lấy từ 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
61Kiểm tra ví dụ cache
Mở trình duyệt:
- Nếu bạn dùng Memcached, truy cập
https://servbay-cakephp-test.local/cache-memcached
. Lần đầu sẽ báo chưa có cache, các lần sau sẽ thấy lấy dữ liệu thành công từ cache. - Nếu dùng Redis, truy cập
https://servbay-cakephp-test.local/cache-redis
. Tương tự, sẽ thấy hiệu ứng cache.
- Nếu bạn dùng Memcached, truy cập
Như vậy, bạn đã kết nối và sử dụng thành công dịch vụ cache ServBay trên dự án CakePHP.
Lưu ý cần thiết
- Thông tin đăng nhập database: User và password mặc định của ServBay (
root
/password
) chỉ dùng cho phát triển cục bộ. Khi deploy sản phẩm thực tế, hãy thay đổi thành thông tin bảo mật hơn. - Thư mục root website: Luôn đảm bảo "Document Root" của website ServBay trỏ tới thư mục
webroot
bên trong dự án CakePHP, không phải thư mục dự án chính. Đây là best practice từ CakePHP. - Tương thích PHP version: Chọn PHP version trên ServBay tương thích với CakePHP bạn dùng. Xem documentation CakePHP để biết chi tiết yêu cầu version.
- Port của ServBay: Nếu các port mặc định của ServBay (ví dụ 80, 443) bị phần mềm khác chiếm dụng, hãy vào settings ServBay đổi port, đồng thời cập nhật file hosts hoặc truy cập website kèm port mới.
Giải đáp thắc mắc thường gặp (FAQ)
- Q: Truy cập
servbay-cakephp-test.local
báo lỗi không tìm thấy trang?- A: Kiểm tra "Document Root" của website trên ServBay đã trỏ đúng tới
/Applications/ServBay/www/servbay-cakephp-app/webroot
. - Xem máy chủ web (Caddy/Nginx) trên ServBay đã chạy chưa.
- Kiểm tra file hosts của hệ thống đã trỏ
servbay-cakephp-test.local
về127.0.0.1
(ServBay thường tự thao tác, nhưng đôi khi nên kiểm tra lại). - Chú ý file
.htaccess
trong dự án CakePHP hoặc cấu hình máy chủ web (thư mụcwebroot/.htaccess
mặc định thường đã chuẩn).
- A: Kiểm tra "Document Root" của website trên ServBay đã trỏ đúng tới
- Q: Kết nối database bị lỗi?
- A: Xem lại dịch vụ database (MySQL/PostgreSQL) trên ServBay đã chạy chưa.
- Kiểm tra thông tin cấu hình kết nối database (
host
,port
,username
,password
,database
...) trongconfig/app_local.php
đã chính xác và khớp với cấu hình ServBay chưa. - Xác nhận rằng bạn đã tạo database
servbay_cakephp_app
.
- Q: Không chạy được lệnh Composer (
bin/cake
)?- A: Đảm bảo dòng lệnh bạn đang ở đúng thư mục dự án CakePHP (
/Applications/ServBay/www/servbay-cakephp-app
). - Đảm bảo các package PHP, Composer trên ServBay đã khởi động.
- Kiểm tra terminal đã nhận được lệnh
php
(thường ServBay sẽ thêm PHP vào PATH). Bạn có thể sử dụng terminal tích hợp trong ServBay hoặc tự chỉnh PATH nếu cần.
- A: Đảm bảo dòng lệnh bạn đang ở đúng thư mục dự án CakePHP (
Tổng kết
Với ServBay, bạn dễ dàng tạo môi trường phát triển cục bộ hiệu quả cho dự án CakePHP. ServBay tích hợp sẵn PHP, Composer, máy chủ web và các dịch vụ database giúp bạn tiết kiệm tối đa thời gian cấu hình. Bài viết đã trình bày chi tiết các bước từ việc khởi tạo dự án, cấu hình cơ bản, cấu hình web server, cho tới việc tích hợp database và dịch vụ cache, giúp bạn nhanh chóng xuất phát hành trình phát triển CakePHP một cách chuyên nghiệp. Hãy tận dụng sự tiện lợi của ServBay để tập trung tối đa vào sáng tạo và lập trình, thay vì loay hoay cấu hình môi trường.