(Bài tiếp) PHP - Hello World!

Cài đặt Laminas MVC Skeleton Application

Laminas Framework là bộ khung chứa rất nhiều thư viện sử dụng nhiều khái niệm mới, nhiều mô hình lập trình khác nhau, nên trước khi học về Laminas bạn cần lưu ý đã học qua các đơn vị kiến thức sau:

Laminas Project có rất nhiều thành phần, tùy cách phối hợp giữa các thành phần đó để tạo nên ứng dụng riêng, trong đó Laminas Skeleton Application như là một ứng dụng khung của Laminas MVC, là một mẫu chuẩn ứng dụng. Để học Laminas cách tốt là bắt đầu cài đặt và tìm hiểu về Laminas Skeleton vì nó chứa các thành phần cơ bản, đã cấu hình phối hợp làm việc, nhằm mục đích tạo ra một ứng dụng web (website) mô hình MVC.

Laminas Skeleton lưu trữ trên GitHub tại: Laminas Skeleton

Tuy nhiên, bạn nên tải về và cài đặt bằng cách sử dụng Composer (cài đặt và dùng Composer), tải và cài đặt gói laminas/laminas-mvc-skeleton

Giả sử sẽ cài đặt dự án vào thư mục có tên first-lamanis (bạn chỉ rõ đường dẫn này trong lệnh) thì thực hiện lệnh (gõ vào dòng lệnh) đó như sau:

composer create-project -s dev laminas/laminas-mvc-skeleton first-lamanis

Khi chạy lệnh, bạn có thể trả lời các tùy chọn như:

Do you want a minimal install (no optional packages)? Y/n

Nếu trả lời Y thì cài đặt ở chế độ tối thiểu, ít tùy chọn. Ở đây sẽ chọn n, để thiết lập các tùy chọn khác nữa

Would you like to install the developer toolbar? y/N

Chọn có cài đặt Developer Toolbar không, đây là một module gắn vào ứng dụng để debug phục vụ cho quá trình phát triển, bạn có thể chọn y để cài đặt, tất nhiên bạn có thể tắt module này bất kỳ lúc nào

Would you like to install database support (installs laminas-db)? y/N

Chọn Y để tích hợp module laminas-db, hỗ trợ truy cập cơ sở dữ liệu

Would you like to install forms support? y/N

Chọn y cài đặt thêm component laminas-form hỗ trợ tạo HTML Form cũng như kiểm tra lấy dữ liệu từ Form gửi lên

Ngoài ra các tùy chọn khác như sau:

Would you like to install JSON de/serialization support? y/N (chọn y)
Would you like to install logging support? y/N (chọn y)
Would you like to install MVC-based console support? (We recommend migrating to zf-console, symfony/console, or Aura.CLI) (chọn N)
Would you like to install i18n support? (chọn y)
Would you like to install the official MVC plugins, including PRG support, identity, and flash messages? (chọn y)
Would you like to use the PSR-7 middleware dispatcher? y/N (chọn N)
Would you like to install sessions support? y/N (chọn y)
Would you like to install MVC testing support? y/N (chọn N)
Would you like to install the laminas-di integration for laminas-servicemanager? y/N (chọn N)
Please select which config file you wish to inject 'Laminas\I18n' into:
[0] Do not inject
[1] config/modules.config.php
[2] config/development.config.php.dist
Make your selection (default is 1): (chọn 1)
Remember this option for other packages of the same type? (Y/n) (chọn Y)
Please select which config file you wish to inject 'Laminas\DeveloperTools' into:
[0] Do not inject
[1] config/modules.config.php
[2] config/development.config.php.dist
Make your selection (default is 1): (chọn 1)
Remember this option for other packages of the same type? (Y/n) (chọn Y)
Do you want to remove the existing VCS (.git, .svn..) history? [Y,n]? (chọn Y)

Như vậy đã hoàn thành cài đặt Laminas Skeleton, toàn bộ code lưu trong thư mục first-lamanis

Cấu trúc thư mục dự án Laminas

Laminas MVC cho tùy biến cấu trúc thư mục tự do, tuy nhiên hãy theo nguyên tắc phổ biến đưa ra bởi chương trình khung. Bạn mở thư mục dự án ra, và cơ bản nó tổ chức như hình:

laminas directory
  • config chứa các file thiết lập chung của Website
  • data nơi lưu dữ liệu (ví dụ cache, files ...)
  • module chứa các module ứng dụng (các module mà bạn dùng tạo ra, cơ bản code PHP ứng dụng của bạn ở đây)
  • public lưu trữ những file thường xuyên truy cập bởi người dùng, như css, img, js trong thư mục con:
    • css
    • js
    • img
    • fonts
  • vendor thư viện dùng bởi Website, đó là các Dependence (thành phần bên thứ 3 bạn dùng tới, các thành phần này được tải về theo cấu hình của composer.json), thư viện ZF ở đây

Trong đó thư mục public có file index.php là điểm mồi để chạy chương trình, hãy cấu hình đề webserver gọi đến file này

Cấu hình chạy Laminas

Bạn chỉ việc cấu hình Web Server của bạn gọi đến điểm mồi thư mục public, tùy loại Web Server mà có thể cấu hình khác nhau (như PHP build-in webserver, Apache, nginx ...), ở môi trường phát triển này, bạn có thể chạy bằng một số cách như:

Sử dụng Webserver build-in PHP

Bản thân PHP tích hợp sẵn một Web Server chạy trong môi trường phát triển, bạn có thể tạo ra một Webserver lắng nghe ở cổng nào đó, ví dụ cổng 8080 với cú pháp như sau, đang ở dòng lệnh trong thư mục dự án (learn-laminas)) gõ:

php -S 0.0.0.0:8080 -t public public/index.php
laminas

Khi webserver đang chạy bạn có thể truy cập ứng dụng bằng địa chỉ http://localhost:8080, nếu muốn dừng webserver nhấn Ctrl + C

laminas

Tức là Website chạy bắt đầu từ file index.php trong thư mục public của dự án.

Giờ bạn dùng một IDE hỗ trợ PHP, HTML, CSS như VSC, PHPStorm, Eclipse (free), NetBeans IDE, Zend Studio ... để mở thư mục dự án và bắt đầu code Laminas

Sử dụng Vagrant chạy Laminas

Trong thư mục của dự án có một file cấu hình Vagrantfile sử dụng Vagrant (xem thêm về Sử dụng Vagrant)

File này cấu hình tạo ra một máy ảo (máy ảo tạo bằng Virtual Box, nên máy phải có Virtual Box trước), máy ảo này chạy hệ điều hình Ubuntu, có cài đặt PHP 7.3 và máy chủ Web Apache - đã cấu hình để ánh xạ thư mục code vào thư mục chạy PHP, Apache của máy ảo đồng thời ánh xạ cổng 8080 của máy host vào cổng 80 của máy ảo.

Giờ bạn chỉ việc thực hiện lệnh tạo và chạy máy ảo:

vagrant up

Sau khi tạo được máy ảo, bạn có thể truy cập ứng dụng tại địa chỉ localhost:8080

Sử dụng Docker

Trong thư mục dự án có sẵn file Dockerfile để tạo một Image chạy PHP7.3 và Apache, có file docker-compose.yaml để chạy dịch vụ này với cấu hình ánh xạ cổng 8080 của máy host vào cổng 80 của container, và ánh xạ thư mục dự án vào thư mục /var/www của container

Giờ bạn chỉ việc thực hiện lệnh

docker-compose up

Chú ý trước khi chạy bạn có thể mở Dockerfile và bỏ comment các dòng

# RUN apt-get install --yes libicu-dev
# RUN docker-php-ext-configure intl
# RUN docker-php-ext-install intl

Tương tự nếu muốn hỗ trợ kết nối đến MySQL thì bỏ comment

# RUN docker-php-ext-install pdo_mysql

Các thành phần trên cần có nếu dự án có sử dụng i18n

Sau khi container được chạy, có thể truy cập ứng dụng tại địa chỉ localhost:8080

Cấu hình sử dụng Apache HTTP

Nếu trên máy cài đặt sẵn PHP (7.3), Apache, MySQL thì tiến hành cấu hình như sau:

Tạo VirtualHost trong file httpd.conf hoặc extra/httpd-vhosts.conf là những file cấu hình của Apache 2.

Giả sử cấu hình để truy cập ứng dụng bằng domain http://learn-laminas.localhost

<VirtualHost *:80 >
    ServerName learn-laminas.localhost
    DocumentRoot đường-dẫn-đến-thư-mục-code-learn-laminas/public
    SetEnv APPLICATION_ENV "development"
    <Directory đường-dẫn-đến-thư-mục-code-learn-laminas/public>
        DirectoryIndex index.php
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Sau đó thêm vào file host (/etc/hosts hoặc c:\windows\system32\drivers\etc\hosts) nội dung:

127.0.0.1 learn-laminas.localhost

Trong các cách chạy trên nên lựa chọn sử dụng Docker hoặc cấu hình Apache trực tiếp trên máy host

Cấu hình hiện thị lỗi và bật/tắt Develope Tool

Cấu hình hiện thị thông báo lỗi

Khi Apache chạy ở môi trường Product thì các thông báo lỗi được tắt để tăng tính bảo mật. Ở môi trường phát triển có thể thiết lập để hiện thị chi tiết. Đầu tiên cho một biến môi trường APPLICATION_ENV để biết là môi trường phát triển, như ở trên là cấu hình cho Apache ở dòng:

SetEnv APPLICATION_ENV "development"

Sau đó thêm đoạn mã sau vào đầu file index.php

/**
 * Display all errors when APPLICATION_ENV is development.
 */
if ($_SERVER['APPLICATION_ENV'] === 'development') {
    error_reporting(E_ALL);
    ini_set("display_errors", '1');
}

Cấu hình bật tắt Develope Tool

Công cụ này rất có ích vì nó cho nhiều thông tin trong quá trình phát triển, nếu muốn tắt nó đơn giản là không nạp module Laminas\DeveloperTools, mở file config/modules.config.php và comment module này lại

/**
 * List of enabled modules for this application.
 *
 * This should be an array of module namespaces used in the application.
 */
return [
    'Laminas\Log',
    'Laminas\Db',
    'Laminas\Mvc\Plugin\FilePrg',
    'Laminas\Mvc\Plugin\FlashMessenger',
    'Laminas\Mvc\Plugin\Identity',
    'Laminas\Mvc\Plugin\Prg',
    'Laminas\Session',
    'Laminas\Mvc\I18n',
    'Laminas\Form',
    'Laminas\Hydrator',
    'Laminas\InputFilter',
    'Laminas\Filter',
    'Laminas\I18n',
    'Laminas\Router',
    'Laminas\Validator',
    //'Laminas\DeveloperTools',
    'Application',
];

Mã nguồn: 01.firstapp


Đăng ký nhận bài viết mới
(Bài tiếp) PHP - Hello World!