Tin Tức

Tổng hợp các bài viết, kinh nghiệm, chia sẻ kiến thức hữu ích về việc làm onsite, nhân sự onsite.

Hướng dẫn tạo và chạy dự án Phalcon PHP cho người mới bắt đầu

folder Kiến thức công nghệ
today 17/09/2024 23:54
Phalcon là một framework PHP hiệu suất cao được triển khai dưới dạng mở rộng C, mang lại tốc độ thực thi vượt trội. Nó tuân theo kiến trúc MVC (Model-View-Controller), cung cấp cho các nhà phát triển trải nghiệm phát triển nhanh chóng và linh hoạt trong khi vẫn duy trì hiệu suất cao.

Các Tính Năng Chính và Lợi Ích của Phalcon:

  • Hiệu Suất Cao: Vì Phalcon được triển khai dưới dạng mở rộng C, nên nó cung cấp hiệu suất xuất sắc.
  • Tính Năng Đầy Đủ: Bao gồm các chức năng như ORM, công cụ mẫu, định tuyến, bộ nhớ đệm, hàng đợi và nhiều hơn nữa để đáp ứng các nhu cầu phát triển khác nhau.
  • Tiêu Thụ Bộ Nhớ Thấp: Nhờ vào triển khai đặc biệt của nó, Phalcon tiêu tốn rất ít bộ nhớ khi chạy.
  • Dễ Sử Dụng: Cung cấp API đơn giản và tài liệu rõ ràng để giúp các nhà phát triển bắt đầu nhanh chóng.
  • Thiết Kế Modular: Cho phép bạn chọn và sử dụng các thành phần khác nhau theo nhu cầu, mang lại sự linh hoạt cao.

Phalcon là lựa chọn lý tưởng để xây dựng các ứng dụng web và API hiệu suất cao, 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 Sử Dụ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ẽ tận dụng tính năng "Host" của ServBay để thiết lập máy chủ web và truy cập dự án thông qua các cấu hình đơn giản.

Lưu ý: Nếu bạn là người dùng NGINX hoặc Apache

ServBay sử dụng Caddy làm máy chủ web mặc định. Đối với những người dùng chuyển từ NGINX và Apache sang ServBay, có một số điểm chính cần lưu ý:

Cấu Hình Caddy

ServBay đi kèm với Caddy đã được cấu hình và tối ưu sẵn. Các nhà phát triển chỉ cần quản lý các trang web thông qua tính năng "Host" của ServBay mà không cần chỉnh sửa thủ công các tệp cấu hình Caddy.

Quy Tắc Rewrite và .htaccess

Trong NGINX và Apache, các nhà phát triển thường tự viết các quy tắc rewrite và tệp .htaccess để xử lý việc viết lại URL và các cài đặt khác. Tuy nhiên, ServBay đã được cấu hình sẵn với các quy tắc của Caddy. Trừ khi có nhu cầu đặc biệt, các nhà phát triển không cần phải viết các quy tắc này.

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-addhttps://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-addhttps://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.