Tạo và Chạy Dự Án CakePHP
CakePHP là gì?
CakePHP là một framework PHP mã nguồn mở, được thiết kế để giúp các nhà phát triển nhanh chóng xây dựng các ứng dụng web. Nó dựa trên kiến trúc MVC (Mô hình-View-Controller), cung cấp một bộ công cụ mạnh mẽ để giảm bớt các công việc thường gặp trong quá trình phát triển như tương tác cơ sở dữ liệu, xử lý biểu mẫu, xác thực và quản lý phiên làm việc.
Các tính năng và lợi ích chính của CakePHP
- Phát triển nhanh chóng: Cung cấp nhiều công cụ tạo mã phong phú giúp nhà phát triển nhanh chóng tạo ra các cấu trúc mã thông dụng.
- ORM linh hoạt và mạnh mẽ: Lớp ORM (Object Relational Mapping) tích hợp sẵn đơn giản hóa việc thao tác cơ sở dữ liệu.
- Bảo mật: Tích hợp nhiều tính năng bảo mật như xác thực đầu vào, bảo vệ CSRF và chống SQL Injection.
- Hỗ trợ từ cộng đồng: Có một cộng đồng hoạt động rộng lớn và hệ sinh thái plugin phong phú.
- Tài liệu tốt: Cung cấp tài liệu và hướng dẫn chi tiết giúp nhà phát triển nhanh chóng tiếp cận.
CakePHP phù hợp với các dự án từ ứng dụng nhỏ đến hệ thống doanh nghiệp lớn, giúp các nhà phát triển nhanh chóng xây dựng các ứng dụng web chất lượng cao.
Tạo và Chạy Dự Án CakePHP Sử Dụng ServBay
Trong bài viết này, chúng ta sẽ sử dụng môi trường PHP của ServBay để tạo và chạy một dự án CakePHP. Chúng ta sẽ sử dụng tính năng 'Host' của ServBay để thiết lập máy chủ web và thông qua một số cấu hình đơn giản để truy cập dự án.
Lưu ý: Nếu bạn là người dùng NGINX hoặc Apache trước đây
ServBay mặc định sử dụng Caddy làm máy chủ web. Đối với người dùng chuyển từ NGINX và Apache sang ServBay, có một số thay đổi quan trọng cần lưu ý:
Cấu hình Caddy
ServBay đã tích hợp sẵn Caddy và cấu hình mặc định đã được tối ưu hóa và thử nghiệm. Nhà phát triển chỉ cần sử dụng tính năng 'Host' của ServBay để quản lý trang web mà không cần tự tay thay đổi tệp cấu hình Caddy.
Quy tắc Rewrite và .htaccess
Trong NGINX và Apache, nhà phát triển thường phải tự viết các quy tắc Rewrite và tệp .htaccess để xử lý URL rewrite và các cấu hình khác. Tuy nhiên, ServBay đã cấu hình sẵn các quy tắc của Caddy, vì vậy trừ khi có yêu cầu đặc biệt, nhà phát triển không cần tự viết các quy tắc này.
Tìm hiểu thêm
Thông tin chi tiết, vui lòng tham khảo Rewrite và htaccess, Cách chuyển trang web Apache sang ServBay, Cách chuyển trang web NGINX sang ServBay.
Tạo Dự Án CakePHP
TIP
ServBay khuyến khích nhà phát triển đặt trang web trong thư mục /Applications/ServBay/www
để dễ dàng quản lý.
Cài đặt Composer
ServBay đã tích hợp Composer sẵn, không cần cài đặt riêng.
Tạo Dự Án CakePHP
Sử dụng Composer để tạo một dự án CakePHP mới:
bashcd /Applications/ServBay/www mkdir servbay-cakephp-app cd servbay-cakephp-app composer create-project --prefer-dist cakephp/app .
1
2
3
4Vào Thư Mục Dự Án
Vào thư mục dự án CakePHP mới tạo:
bashcd /Applications/ServBay/www/servbay-cakephp-app
1
Cấu Hình Khởi Tạo
Cấu hình biến môi trường
Trong tệp
config/app_local.php
, cấu hình thông tin kết nối cơ sở dữ liệu và các biến môi trường khác. Đảm bảo các cấu hình sau đã được thiết lập đúng:php'Datasources' => [ 'default' => [ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', 'url' => env('DATABASE_URL', null), ], ],
1
2
3
4
5
6
7
8
9
Cấu Hình Máy Chủ Web
Sử dụng tính năng 'Host' của ServBay để truy cập dự án CakePHP. Trong cài đặt 'Host' của ServBay, thêm một 'Host' mới:
- Tên:
My First CakePHP Dev Site
- Tên miền:
servbay-cakephp-test.local
- Loại website:
PHP
- Phiên bản PHP: Chọn
8.3
- Thư mục gốc website:
/Applications/ServBay/www/servbay-cakephp-app/webroot
Cài đặt chi tiết hãy tham khảo Thêm Trang Web Đầu Tiên.
Thêm Mã Mẫu
Trong tệp config/routes.php
, thêm đoạn mã sau để xuất ra "Hello ServBay!":
$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
Trong tệp src/Controller/PagesController.php
, thêm đoạn mã sau:
namespace App\Controller;
use Cake\Http\Response;
class PagesController extends AppController
{
public function display()
{
return new Response(['body' => 'Hello ServBay!']);
}
}
2
3
4
5
6
7
8
9
10
11
Truy Cập Trang Web
Mở trình duyệt, truy cập https://servbay-cakephp-test.local
, bạn sẽ thấy trang web xuất ra Hello ServBay!
.
Ví Dụ Cơ Sở Dữ Liệu NoSQL
Ví Dụ Memcached
Cài đặt Memcached extension
Trong ServBay, extension Memcached đã được cài đặt sẵn, không cần cài đặt thêm.
Cấu hình Memcached
Trong tệp
config/app_local.php
, cấu hình thông tin kết nối Memcached:php'Cache' => [ 'default' => [ 'className' => 'Cake\Cache\Engine\MemcachedEngine', 'servers' => ['127.0.0.1'], ], ],
1
2
3
4
5
6Cấu hình route
Trong tệp
config/routes.php
, thêm đoạn mã sau:php$routes->connect('/memcached', ['controller' => 'Pages', 'action' => 'memcached']);
1Sử dụng Memcached
Trong controller, sử dụng cache:
phpuse Cake\Cache\Cache; class PagesController extends AppController { public function memcached() { $cacheKey = 'my_cache_key'; $cachedData = Cache::read($cacheKey); if (!$cachedData) { $cachedData = 'Hello Memcached!'; Cache::write($cacheKey, $cachedData); } return new Response(['body' => $cachedData]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Mở trình duyệt, truy cập
https://servbay-cakephp-test.local/memcached
Ví Dụ Redis
Cài đặt Redis extension
Trong ServBay, extension Redis đã được cài đặt sẵn, không cần cài đặt thêm.
Cấu hình Redis
Trong tệp
config/app_local.php
, cấu hình thông tin kết nối Redis:php'Cache' => [ 'default' => [ 'className' => 'Cake\Cache\Engine\RedisEngine', 'server' => '127.0.0.1', 'port' => 6379, ], ],
1
2
3
4
5
6
7Cấu hình route
Trong tệp
config/routes.php
, thêm đoạn mã sau:php$routes->connect('/redis', ['controller' => 'Pages', 'action' => 'redis']);
1Sử dụng Redis
Trong controller, sử dụng cache:
phpuse Cake\Cache\Cache; class PagesController extends AppController { public function redis() { $cacheKey = 'my_cache_key'; $cachedData = Cache::read($cacheKey); if (!$cachedData) { $cachedData = 'Hello Redis!'; Cache::write($cacheKey, $cachedData); } return new Response(['body' => $cachedData]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Mở trình duyệt, truy cập
https://servbay-cakephp-test.local/redis
Ví Dụ Cơ Sở Dữ Liệu Quan Hệ
Tạo Cấu Trúc Cơ Sở Dữ Liệu và Tệp Migration
Tạo tệp migration
Sử dụng công cụ Bake của CakePHP để tạo tệp migration:
bashbin/cake bake migration CreateUsers name:string email:string:unique
1Chạy migration
Sử dụng lệnh của CakePHP để chạy migration, tạo bảng cơ sở dữ liệu:
bashbin/cake migrations migrate
1
Ví Dụ MySQL
Cấu hình MySQL
Trong tệp
config/app_local.php
, cấu hình thông tin kết nối MySQL:php'Datasources' => [ 'default' => [ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', 'url' => env('DATABASE_URL', null), ], ],
1
2
3
4
5
6
7
8
9Cấu hình route
Trong tệp
config/routes.php
, thêm đoạn mã sau:php$routes->connect('/mysql-add', ['controller' => 'Pages', 'action' => 'mysqlAdd']); $routes->connect('/mysql', ['controller' => 'Pages', 'action' => 'mysql']);
1
2Thêm Table User
Lưu mã sau vào file
src/Model/Table/UsersTable.php
.php<?php namespace App\Model\Table; use Cake\ORM\Table; class UsersTable extends Table { }
1
2
3
4
5
6
7
8Ghi Dữ Liệu Người Dùng
Trong controller, thêm mã ghi dữ liệu người dùng:
phpuse App\Model\Entity\User; use Cake\ORM\TableRegistry; class PagesController extends AppController { public function mysqlAdd() { $usersTable = TableRegistry::getTableLocator()->get('Users'); $user = $usersTable->newEntity(['name' => 'ServBay', 'email' => '[email protected]']); if ($usersTable->save($user)) { return new Response(['body' => 'User added']); } return new Response(['body' => 'Failed to add user']); } public function mysql() { $usersTable = TableRegistry::getTableLocator()->get('Users'); $users = $usersTable->find()->all(); return new Response(['body' => json_encode($users)]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25Mở trình duyệt, truy cập
https://servbay-cakephp-test.local/mysql-add
vàhttps://servbay-cakephp-test.local/mysql
Ví Dụ PostgreSQL
Cấu hình PostgreSQL
Trong tệp
config/app_local.php
, cấu hình thông tin kết nối PostgreSQL:php'Datasources' => [ 'default' => [ 'host' => '127.0.0.1', 'driver' => Postgres::Class, 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', 'url' => env('DATABASE_URL', null), ], ],
1
2
3
4
5
6
7
8
9
10Cấu hình route
Trong tệp
config/routes.php
, thêm đoạn mã sau:php$routes->connect('/pgsql-add', ['controller' => 'Pages', 'action' => 'pgsqlAdd']); $routes->connect('/pgsql', ['controller' => 'Pages', 'action' => 'pgsql']);
1
2Thêm Table User
Lưu mã sau vào file
src/Model/Table/UsersTable.php
.php<?php namespace App\Model\Table; use Cake\ORM\Table; class UsersTable extends Table { }
1
2
3
4
5
6
7
8Ghi Dữ Liệu Người Dùng
Trong controller, thêm mã ghi dữ liệu người dùng:
phpuse App\Model\Entity\User; use Cake\ORM\TableRegistry; class PagesController extends AppController { public function pgsqlAdd() { $usersTable = TableRegistry::getTableLocator()->get('Users'); $user = $usersTable->newEntity(['name' => 'ServBay', 'email' => '[email protected]']); if ($usersTable->save($user)) { return new Response(['body' => 'User added']); } return new Response(['body' => 'Failed to add user']); } public function pgsql() { $usersTable = TableRegistry::getTableLocator()->get('Users'); $users = $usersTable->find()->all(); return new Response(['body' => json_encode($users)]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25Mở trình duyệt, truy cập
https://servbay-cakephp-test.local/pgsql-add
vàhttps://servbay-cakephp-test.local/pgsql
Thông qua các bước trên, bạn đã tạo và chạy thành công một dự án CakePHP, sử dụng các chức năng của ServBay để quản lý và truy cập dự án của bạn, đồng thời kết nối với nhiều cơ sở dữ liệu khác nhau và gọi dữ liệu.