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:
- Nắm vững PHP cơ bản
- Viết mã HTML, CSS và tìm hiểu thêm về Getbootstrap.
- Sử dụng JavaScript, tìm hiểu thêm về jQuery
- Đọc qua các mô hình lập trình: OOP, MVC, OB, AOP ...(câp nhật tại Thuật ngữ)
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:
- 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
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
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