Phalcon và Các Phiên Bản DevTools
Tùy thuộc vào phiên bản PHP, bạn cần cài đặt các 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
-
PHP 7.2, 7.3, 7.4: Phalcon 4.1.2
Phiên bản Phalcon DevTools tương ứng: 4.3.x
-
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ợ chính thức của DevTools cho PHP 8.x không tốt, nên khuyến nghị sử dụng phiên bản sửa lỗi)
Tạo Dự Án Phalcon
MẸO: ServBay khuyến nghị các nhà phát triển đặt các trang web trong thư mục /Applications/ServBay/www
để quản lý dễ hơn.
Cài Đặt Composer
ServBay đã tích hợp sẵn Composer, do đó không cần cài đặt riêng.
Tạo Thư Mục Dự Án
Tạo một thư mục dự án và vào thư mục đó:
cd /Applications/ServBay/www
mkdir servbay-phalcon-app
cd servbay-phalcon-app
Cài Đặt Phalcon DevTools
Cài đặt Phalcon DevTools tương ứng theo phiên bản PHP:
-
PHP 5.6, 7.0, 7.1:
composer require phalcon/devtools:"^3.4"
-
PHP 7.2, 7.3, 7.4:
composer require phalcon/devtools:"~4.1"
-
PHP 8.0, 8.1, 8.2, 8.3, 8.4:
Tạo một tệp composer.json
với 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
}
Sau đó chạy:
composer update
Tạo Dự Án Phalcon
Sử dụng Phalcon DevTools để tạo một dự án Phalcon mới:
vendor/bin/phalcon project servbay-phalcon-app
Vào Thư Mục Dự Án
Vào thư mục dự án Phalcon mới tạo:
cd servbay-phalcon-app
Khởi Tạo Cấu Hình
Cấu Hình Biến Môi Trường
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 trong tệp app/config/config.php
. Đảm bảo các cấu hình sau được thiết lập đúng:
return new \Phalcon\Config([
'database' => [
'adapter' => 'Mysql',
'host' => '127.0.0.1',
'username' => 'root',
'password' => 'password',
'dbname' => 'servbay_phalcon_app',
],
]);
Cấu Hình Máy Chủ Web
Sử dụng tính năng "Host" của ServBay để truy cập dự án Phalcon thông qua máy chủ web. Trong cài đặt "Host" của ServBay, thêm một host mới:
- Tên: My First Phalcon Dev Site
- Miền: servbay-phalcon-test.local
- Loại Website: PHP
- Phiên bản PHP: Chọn phiên bản PHP tương ứng
- Thư Mục Gốc Website: /Applications/ServBay/www/servbay-phalcon-app/servbay-phalcon-app/public
Để biết chi tiết về các bước thiết lập, vui lòng tham khảo tài liệu về việc 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 word!":
$router->add(
'/',
[
'controller' => 'index',
'action' => 'index',
]
);
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!';
}
}
Truy Cập Website
Mở trình duyệt và truy cập https://servbay-phalcon-test.local
, bạn sẽ thấy trang xuất "Hello ServBay!".
Ví Dụ Cơ Sở Dữ Liệu NoSQL
Ví Dụ Memcached
Cài Đặt Extension Memcached
Extension Memcached đã được cài sẵn trong ServBay, không cần cài đặt thêm.
Cấu Hình Memcached
Thêm thông tin kết nối Memcached vào tệp app/config/config.php
:
return 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,
],
]);
Cấu Hình Định Tuyến
Thêm mã sau vào tệp app/config/routes.php
:
$router->add(
'/memcached',
[
'controller' => 'index',
'action' => 'memcached',
]
);
Sử Dụng Memcached
Sử dụng bộ nhớ đệm trong controller:
namespace 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;
}
}
Mở trình duyệt và truy cập https://servbay-phalcon-test.local/memcached
.
Ví Dụ Redis
Cài Đặt Extension Redis
Extension Redis đã được cài sẵn trong ServBay, không cần cài đặt thêm.
Cấu Hình Redis
Thêm thông tin kết nối Redis vào tệp app/config/config.php
:
return 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,
],
]);
Cấu Hình Định Tuyến
Thêm mã sau vào tệp app/config/routes.php
:
$router->add(
'/redis',
[
'controller' => 'index',
'action' => 'redis',
]
);
Sử Dụng Redis
Sử dụng bộ nhớ đệm trong controller:
namespace 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;
}
}
Mở trình duyệt và truy cập https://servbay-phalcon-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 Di Chuyển
Tạo Tệp Di Chuyển
Sử dụng Phalcon DevTools để tạo tệp di chuyển:
vendor/bin/phalcon migration generate --directory=servbay-phalcon-app
Chỉnh Sửa Tệp Di Chuyển
Trong thư mục di chuyển, tạo một tệp di chuyển mới và chỉnh sửa để định nghĩa cấu trúc bảng cơ sở dữ liệu:
use 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'),
],
]);
}
}
Chạy Di Chuyển
Sử dụng lệnh Phalcon DevTools để chạy di chuyển và tạo bảng cơ sở dữ liệu:
vendor/bin/phalcon migration run --directory=servbay-phalcon-app
Ví Dụ MySQL
Cấu Hình MySQL
Cấu hình thông tin kết nối MySQL trong tệp app/config/config.php
:
return new \Phalcon\Config([
'database' => [
'adapter' => 'Mysql',
'host' => '127.0.0.1',
'username' => 'root',
'password' => 'password',
'dbname' => 'servbay_phalcon_app',
],
]);
Cấu Hình Định Tuyến
Thêm mã sau vào tệp app/config/routes.php
:
$router->add(
'/mysql-add',
[
'controller' => 'index',
'action' => 'mysqlAdd',
]
);
$router->add(
'/mysql',
[
'controller' => 'index',
'action' => 'mysql',
]
);
Chèn Dữ Liệu Người Dùng
Chèn dữ liệu người dùng trong controller:
namespace 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', 'demo@servbay.test'],
['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);
}
}
Mở trình duyệt và truy cập https://servbay-phalcon-test.local/mysql-add
và https://servbay-phalcon-test.local/mysql
.
Ví Dụ PostgreSQL
Cấu Hình PostgreSQL
Cấu hình thông tin kết nối PostgreSQL trong tệp app/config/config.php
:
return new \Phalcon\Config([
'database' => [
'adapter' => 'Postgresql',
'host' => '127.0.0.1',
'username' => 'root',
'password' => 'password',
'dbname' => 'servbay_phalcon_app',
],
]);
Cấu Hình Định Tuyến
Thêm mã sau vào tệp app/config/routes.php
:
$router->add(
'/pgsql-add',
[
'controller' => 'index',
'action' => 'pgsqlAdd',
]
);
$router->add(
'/pgsql',
[
'controller' => 'index',
'action' => 'pgsql',
]
);
Chèn Dữ Liệu Người Dùng
Chèn dữ liệu người dùng trong controller:
namespace App\Controllers;
use Phalcon\Mvc\Controller;
use Phalcon\Db\Adapter\Pdo\Postgresql;
class IndexController extends Controller
{
public function pgsqlAddAction()
{
$connection = new Postgresql([
'host' => '127.0.0.1',
'username' => 'root',
'password' => 'password',
'dbname' => 'servbay_phalcon_app',
]);
$success = $connection->insert(
'users',
['ServBay', 'demo@servbay.test'],
['name', 'email']
);
echo $success ? 'User added' : 'Failed to add user';
}
public function pgsqlAction()
{
$connection = new Postgresql([
'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);
}
}
Mở trình duyệt và truy cập https://servbay-phalcon-test.local/pgsql-add
và https://servbay-phalcon-test.local/pgsql
.
Như vậy, bạn đã hoàn tất việc tạo và chạy dự án Phalcon, sử dụng các tính năng của ServBay để quản lý và truy cập dự án, kết nối với các cơ sở dữ liệu khác nhau và truy xuất dữ liệu.