Tạo và Chạy Dự Án Phalcon
Phalcon là gì?
Phalcon là một framework PHP hiệu suất cao, được triển khai dưới dạng một phần mở rộng của C, mang lại hiệu quả thực thi tuyệt vời. Nó tuân theo kiến trúc MVC (Model-View-Controller), nhằm mang lại trải nghiệm phát triển nhanh chóng và linh hoạt cho các nhà phát triển, đồng thời duy trì hiệu suất cao.
Các đặc điểm và lợi ích chính của Phalcon
- Hiệu suất cao: Do Phalcon được triển khai dưới dạng phần mở rộng C, nó cung cấp hiệu suất xuất sắc.
- Dồi dào chức năng: Bao gồm ORM, bộ máy mẫu, định tuyến, bộ nhớ cache, hàng đợi, v.v., đáp ứng nhu cầu phát triển khác nhau.
- Tiêu thụ ít bộ nhớ: Với cách triển khai độc đáo, Phalcon tiêu thụ rất ít bộ nhớ trong thời gian chạy.
- Dễ sử dụng: Cung cấp API dễ sử dụng và tài liệu rõ ràng, giúp các nhà phát triển nhanh chóng nắm bắt dự án.
- Thiết kế mô-đun: Cho phép chọn và sử dụng các thành phần khác nhau theo nhu cầu, tính linh hoạt cao.
Phalcon là lựa chọn lý tưởng cho việc xây dựng các ứng dụng Web hiệu suất cao và API, phù hợp với các dự án từ ứng dụng nhỏ đến hệ thống doanh nghiệp lớn.
Tạo và Chạy Dự Án Phalcon Bằng ServBay
Trong bài viết này, chúng ta sẽ sử dụng môi trường PHP do ServBay cung cấp để tạo và chạy một dự án Phalcon. Chúng ta sẽ sử dụng chức năng 'Host' của ServBay để thiết lập máy chủ Web, và thực hiện việc truy cập dự án thông qua cài đặt đơn giản.
Lưu ý: Nếu bạn từng là người dùng NGINX hoặc Apache
ServBay mặc định sử dụng Caddy làm máy chủ Web. Đối với những 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 Caddy và cấu hình mặc định đã được tối ưu và kiểm tra. Nhà phát triển chỉ cần sử dụng chức năng 'Host' của ServBay để quản lý trang web, không cần phải chỉnh sửa tệp cấu hình của 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, do đó, trừ khi có nhu cầu đặc biệt, nhà phát triển không cần tự viết những quy tắc này.
Tìm hiểu thêm
Để biết thêm thông tin, vui lòng tham khảo Rewrite và htaccess, Cách chuyển website Apache sang ServBay, Cách chuyển website NGINX sang ServBay.
Lưu ý: Bật Module Phalcon
ServBay đã tích hợp sẵn module Phalcon, người dùng cần bật và khởi động lại PHP. Vui lòng tham khảo bài viết Cách bật Module Phalcon trong ServBay.
Các Phiên Bản Khác Nhau của Phalcon và DevTools
Tùy thuộc vào phiên bản PHP, cần cài đặt phiên bản Phalcon DevTools khác nhau:
- PHP 5.6, 7.0, 7.1: Phalcon 3.4.5
- Phiên bản Phalcon DevTools tương ứng:
3.4.x
- Phiên bản Phalcon DevTools tương ứng:
- PHP 7.2, 7.3, 7.4: Phalcon 4.1.2
- Phiên bản Phalcon DevTools tương ứng:
4.3.x
- Phiên bản Phalcon DevTools tương ứng:
- PHP 8.0, 8.1, 8.2, 8.3, 8.4: Phalcon 5.7.0
- Phiên bản Phalcon DevTools tương ứng:
5.0.x
(do hỗ trợ cho PHP 8.x của DevTools chính thức không tốt, khuyến nghị sử dụng bản sửa lỗi)
- Phiên bản Phalcon DevTools tương ứng:
Tạo Dự Án Phalcon
TIP
ServBay khuyến nghị 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 sẵn Composer, không cần cài đặt riêng.
Tạo thư mục dự án
Tạo thư mục dự án và truy cập vào đó:
bashcd /Applications/ServBay/www mkdir servbay-phalcon-app cd servbay-phalcon-app
1
2
3Cài đặt Phalcon DevTools
Cài đặt Phalcon DevTools tương ứng với phiên bản PHP:
PHP 5.6, 7.0, 7.1:
bashcomposer require phalcon/devtools:"^3.4"
1PHP 7.2, 7.3, 7.4:
bashcomposer require phalcon/devtools:"~4.1"
1PHP 8.0, 8.1, 8.2, 8.3, 8.4:
Tạo tệp
composer.json
, nhập nội dung sau:
{
"repositories": [
{
"url": "https://github.com/daleffe/phalcon-devtools-5.x-fixed.git",
"type": "git"
}
],
"require": {
"phalcon/devtools": "dev-master"
},
"minimum-stability": "dev",
"prefer-stable": true
}
2
3
4
5
6
7
8
9
10
11
12
13
Sau đó chạy
composer update
Tạo Dự Án Phalcon
Sử dụng Phalcon DevTools để tạo một dự án Phalcon mới:
bashvendor/bin/phalcon project servbay-phalcon-app
1Truy cập thư mục dự án
Truy cập vào thư mục dự án Phalcon vừa tạo:
bashcd servbay-phalcon-app
1
Cấu hình khởi tạo
Cấu hình biến môi trường
Trong tệp
app/config/config.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ấu hình dưới đây đã được thiết lập đúng:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9
Cấu hình máy chủ Web
Sử dụng chức năng 'Host' của ServBay để truy cập vào dự án Phalcon. Trong cài đặt 'Host' của ServBay, thêm một máy chủ mới:
- Tên:
My First Phalcon Dev Site
- Tên miền:
servbay-phalcon-test.local
- Loại trang web:
PHP
- Phiên bản PHP: Chọn phiên bản PHP tương ứng
- Thư mục gốc của trang web:
/Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public
Chi tiết bước cài đặt vui lòng tham khảo bài viết Thêm trang web đầu tiên.
Thêm mã ví dụ
Trong tệp app/config/routes.php
, thêm mã sau để xuất "Hello ServBay!":
$router->add(
'/',
[
'controller' => 'index',
'action' => 'index',
]
);
2
3
4
5
6
7
Trong tệp app/controllers/IndexController.php
, thêm mã sau:
namespace App\Controllers;
use Phalcon\Mvc\Controller;
class IndexController extends Controller
{
public function indexAction()
{
echo 'Hello ServBay!';
}
}
2
3
4
5
6
7
8
9
10
11
Truy cập trang web
Mở trình duyệt và truy cập https://servbay-phalcon-test.local
, bạn sẽ thấy trang web xuất Hello ServBay!
.
Ví dụ về cơ sở dữ liệu NoSQL
Ví dụ về Memcached
Cài đặt phần mở rộng Memcached
Trong ServBay, phần mở rộng Memcached đã được cài đặt sẵn, không cần cài đặt thêm.
Cấu hình Memcached
Trong tệp
app/config/config.php
, thêm thông tin kết nối Memcached:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], 'cache' => [ 'adapter' => 'Memcached', 'host' => '127.0.0.1', 'port' => 11211, ], ]);
1
2
3
4
5
6
7
8
9
10
11
12
13
14Cấu hình tuyến đường
Trong tệp
app/config/routes.php
, thêm mã sau:php$router->add( '/memcached', [ 'controller' => 'index', 'action' => 'memcached', ] );
1
2
3
4
5
6
7Sử dụng Memcached
Trong bộ điều khiển, sử dụng Memcached:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Cache\Backend\Memcached; use Phalcon\Cache\Frontend\Data as FrontData; class IndexController extends Controller { public function memcachedAction() { $frontCache = new FrontData([ 'lifetime' => 86400 ]); $cache = new Memcached($frontCache, [ 'host' => '127.0.0.1', 'port' => 11211, ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->get($cacheKey); if ($cachedData === null) { $cachedData = 'Hello Memcached!'; $cache->save($cacheKey, $cachedData); } echo $cachedData; } }
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
30Mở trình duyệt và truy cập
https://servbay-phalcon-test.local/memcached
Ví dụ về Redis
Cài đặt phần mở rộng Redis
Trong ServBay, phần mở rộng Redis đã được cài đặt sẵn, không cần cài đặt thêm.
Cấu hình Redis
Trong tệp
app/config/config.php
, thêm thông tin kết nối Redis:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], 'cache' => [ 'adapter' => 'Redis', 'host' => '127.0.0.1', 'port' => 6379, ], ]);
1
2
3
4
5
6
7
8
9
10
11
12
13
14Cấu hình tuyến đường
Trong tệp
app/config/routes.php
, thêm mã sau:php$router->add( '/redis', [ 'controller' => 'index', 'action' => 'redis', ] );
1
2
3
4
5
6
7Sử dụng Redis
Trong bộ điều khiển, sử dụng Redis:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Cache\Backend\Redis; use Phalcon\Cache\Frontend\Data as FrontData; class IndexController extends Controller { public function redisAction() { $frontCache = new FrontData([ 'lifetime' => 86400 ]); $cache = new Redis($frontCache, [ 'host' => '127.0.0.1', 'port' => 6379, ]); $cacheKey = 'my_cache_key'; $cachedData = $cache->get($cacheKey); if ($cachedData === null) { $cachedData = 'Hello Redis!'; $cache->save($cacheKey, $cachedData); } echo $cachedData; } }
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
30Mở trình duyệt và truy cập
https://servbay-phalcon-test.local/redis
Ví dụ về cơ sở dữ liệu quan hệ
Tạo cấu trúc và tệp di chuyển cơ sở dữ liệu
Tạo tệp di chuyển
Sử dụng Phalcon DevTools để tạo tệp di chuyển:
bashvendor/bin/phalcon migration generate --directory=servbay-phalcon-app
1Chỉnh sửa tệp di chuyển
Trong thư mục
migrations
tạo một tệp di chuyển mới và chỉnh sửa nó để định nghĩa cấu trúc bảng cơ sở dữ liệu:phpuse Phalcon\Db\Column; use Phalcon\Db\Index; use Phalcon\Migrations\Mvc\Model\Migration; class UsersMigration_100 extends Migration { public function morph() { $this->morphTable('users', [ 'columns' => [ new Column( 'id', [ 'type' => Column::TYPE_INTEGER, 'autoIncrement' => true, 'notNull' => true, 'primary' => true, ] ), new Column( 'name', [ 'type' => Column::TYPE_VARCHAR, 'size' => 255, 'notNull' => true, ] ), new Column( 'email', [ 'type' => Column::TYPE_VARCHAR, 'size' => 255, 'notNull' => true, 'unique' => true, ] ), ], 'indexes' => [ new Index('PRIMARY', ['id'], 'PRIMARY'), new Index('email_UNIQUE', ['email'], 'UNIQUE'), ], ]); } }
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
44Chạy di chuyển
Sử dụng lệnh Phalcon DevTools để chạy di chuyển, tạo bảng cơ sở dữ liệu:
bashvendor/bin/phalcon migration run --directory=servbay-phalcon-app
1
Ví dụ về MySQL
Cấu hình MySQL
Trong tệp
app/config/config.php
, cấu hình thông tin kết nối MySQL:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Mysql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9Cấu hình tuyến đường
Trong tệp
app/config/routes.php
, thêm mã sau:php$router->add( '/mysql-add', [ 'controller' => 'index', 'action' => 'mysqlAdd', ] ); $router->add( '/mysql', [ 'controller' => 'index', 'action' => 'mysql', ] );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Ghi dữ liệu người dùng
Trong bộ điều khiển, ghi dữ liệu người dùng:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Mysql; class IndexController extends Controller { public function mysqlAddAction() { $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $success = $connection->insert( 'users', ['ServBay', '[email protected]'], ['name', 'email'] ); echo $success ? 'User added' : 'Failed to add user'; } public function mysqlAction() { $connection = new Mysql([ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ]); $users = $connection->fetchAll('SELECT * FROM users', \Phalcon\Db\Enum::FETCH_ASSOC); echo 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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39Mở trình duyệt và truy cập
https://servbay-phalcon-test.local/mysql-add
vàhttps://servbay-phalcon-test.local/mysql
Ví dụ về PostgreSQL
Cấu hình PostgreSQL
Trong tệp
app/config/config.php
, cấu hình thông tin kết nối PostgreSQL:phpreturn new \Phalcon\Config([ 'database' => [ 'adapter' => 'Postgresql', 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'dbname' => 'servbay_phalcon_app', ], ]);
1
2
3
4
5
6
7
8
9Cấu hình tuyến đường
Trong tệp
app/config/routes.php
, thêm mã sau:php$router->add( '/pgsql-add', [ 'controller' => 'index', 'action' => 'pgsqlAdd', ] ); $router->add( '/pgsql', [ 'controller' => 'index', 'action' => 'pgsql', ] );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Ghi dữ liệu người dùng
Trong bộ điều khiển, ghi dữ liệu người dùng:
phpnamespace App\Controllers; use Phalcon\Mvc\Controller; use Phalcon\Db\Adapter\Pdo\Postgresql; class IndexController extends Controller { public function pgsqlAddAction() { $connection = new Postgresql([
1
2
3
4
5
6
7
8
9
10