Một ứng dụng Zend Framework thường có nhiều thành phần, chúng yêu cầu cấu hình đúng khi chạy, ví dụ như cấu hình kết nối đến CSDL, cấu hình nạp những module nào vào ứng dụng, thiết lập các tham số tùy chọn ... Bạn có thể cấu hình ở hai cấp độ, cấp độ ứng dụng và cấp độ module. Ở cấp độ module bạn định nghĩa các tham số phục vụ cho module đó.
Config cấp độ ứng dụng
Các cấu hình ứng dụng chứa trong thư mục config
của ứng dụng, có nhiều file khác nhau
config application.config.php modules.config.php autoload gloabal.php local.php
application.config.php
là file cấu hình chính, nó dùng cho ứng dụng khởi tạo và nạp các dịch vụ cần thiết.
Bạn mở file này ra, nội dung chính của nó như sau:
return [ //Danh sách các module nạp vào từ file modules.config.php 'modules' => require __DIR__ . '/modules.config.php', 'module_listener_options' => [ //Các đường dẫn để ứng dụng tìm các Module 'module_paths' => [ './module', './vendor', ], //Đường dẫn đến các file config, ứng dụng tự động nạp sau khi các //module load xong, nếu thông số cùng tên định nghĩa bởi module có thể //bị ghi đè bởi thông số trong này. 'config_glob_paths' => [ realpath(__DIR__) . '/autoload/{{,*.}global,{,*.}local}.php', ], // Có phép tạo cache các cấu hình, lưu ở thư mục cache_dir // trong quá trình phát triển nên chọn false, khi deploy mới để true 'config_cache_enabled' => true, // Hậu tố khi tạo tên file cache 'config_cache_key' => 'application.config.cache', //Cho phép tạo cache cấu hình định nghĩa các lớp module 'module_map_cache_enabled' => true, // Hậu tố khi tạo file cache cấu hình module 'module_map_cache_key' => 'application.module.cache', // Đường dẫn lưu cache 'cache_dir' => 'data/cache/', ], ];
Trong file trên có cấu hình cho biết lấy danh sách các module mà ứng dụng sử dụng ở file modules.config.php
, bạn mở file ra, thì nội dung cơ bản như sau:
return [ 'Zend\ServiceManager\Di', 'Zend\Session', 'Zend\Mvc\Plugin\Prg', 'Zend\Mvc\Plugin\Identity', 'Zend\Mvc\Plugin\FlashMessenger', 'Zend\Mvc\Plugin\FilePrg', 'Zend\Mvc\I18n', 'Zend\Mvc\Console', 'Zend\Log', 'Zend\Form', 'Zend\Db', 'Zend\Cache', 'Zend\Router', 'Zend\Validator', //'ZendDeveloperTools', ];
Ứng dụng bạn cần nạp các module nào thì thêm vào ở file này.
Cấu hình ở cấp độ module với Zend Framework
Ngoài cách sử dụng các cấu hình khai báo cấp độ ứng dụng ở trên, có thể bạn cấu hình ở cấp độ module nhằm mục đích chia nhỏ việc cấu hình theo chức năng module để dễ quản lý, thứ hai là cấu hình dành cho module chỉ được nạp khi module đó có sử dụng trong ứng dụng
Thông thường mỗi module xây dựng theo gợi ý của Zend Framework nên có một thư mục trong module tên là config
trong đó chứa file tên module.config.php
là nơi để thiết lập cấu hình module.
Ví dụ ở chương trình Skeleton phần trước, bạn xem file cấu hình của module Application
ở \Application\config\module.config.php
,
mở ra xem nó có nội dung cơ bản như:
return [ 'router' => [ 'routes' => [ 'home' => [ 'type' => Literal::class, 'options' => [ 'route' => '/', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'index', ], ], ], 'application' => [ 'type' => Segment::class, 'options' => [ 'route' => '/application[/:action]', 'defaults' => [ 'controller' => Controller\IndexController::class, 'action' => 'index', ], ], ], ], ], 'controllers' => [ 'factories' => [ Controller\IndexController::class => InvokableFactory::class, ], ], 'view_manager' => [ 'display_not_found_reason' => true, 'display_exceptions' => true, 'doctype' => 'HTML5', 'not_found_template' => 'error/404', 'exception_template' => 'error/index', 'template_map' => [ 'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', 'application/index/index' => __DIR__ . '/../view/application/index/index.phtml', 'error/404' => __DIR__ . '/../view/error/404.phtml', 'error/index' => __DIR__ . '/../view/error/index.phtml', ], 'template_path_stack' => [ __DIR__ . '/../view', ], ], ];
Đó là các cấu hình dánh cho module Application, ý nghĩa các thông số này sẽ tìm hiểu dần dần ở sau.
Kết hợp cấu hình lại với nhau
Khi ứng dụng chạy, nó sẽ đọc cấu hình từ cấp độ ứng dụng, các cấu hình mở rộng từ thư mục config\autorun, đọc cấu hình từ các module. Tất các các cấu hình đó lưu trong các mảng riêng biệt, sau khi kết thúc việc đọc cấu hình ứng dụng sẽ tiến hành trộn một số chúng vào thành một mảng để sử dụng (quá trình này đã thiết lập để ứng dụng Skeleton tự động thực hiện).
application.config.php
các cấu hình trong file này cơ bản để nạp các dịch vụ, nên nó lưu ở mảng riêng, không trộn
Cấu hình từ tất cả các module sẽ trộn thành một mảng, tiếp theo cấu hình từ config\autorun trộn thành một mảng mảng này sẽ dùng trộn với mảng kết hợp của module. Như vậy giá trị trong mảng này có thể ghi đè nên mảng trộn module.
Đọc các cấu hình
Nếu có nhu cầu đọc các cấu hình này, bạn có thể thực hiện như sau:
Lấy đối tượng Service Manager (SM) của ứng dụng. SM là đối tượng quản lý các dịch vụ của ứng dụng, trong đó có lưu thông số config. SM được ứng dụng khung tạo ra mặc định. Để lấy được SM có một số cách tùy thuộc vào trường hợp lấy ở Controller hay ở View ... Các trường hợp khác ta sẽ thảo luận sau.
Ở đây ví dụ đọc config ở phương thức onBootstrap(\Zend\Mvc\MvcEvent $e) của Module.php
Mở file Module.php của module Application
, cập nhật phương thức onBootstrap
public function onBootstrap(\Zend\Mvc\MvcEvent $e) { //Lấy đối tượng Application $app = $e->getApplication(); //Lấy đối tượng Service Manager $sm = $app->getServiceManager(); //Lấy mảng toàn bộ config ứng dụng $config = $sm->get('config'); //Lấy config về router $router_config = $config['router']; var_dump($router_config); }
Chú ý trong ứng dụng khung của Zend Framework các module có thể cấu hình rất nhiều thiết lập các dịch vụ ứng dụng, mỗi dịch vụ có một key riêng trong hệ thống config (bạn sẽ tìm hiểu sau)
ControllerPluginManager |
getControllerPluginConfig() |
controller_plugins |
ControllerManager |
getControllerConfig() |
controllers |
FilterManager |
getFilterConfig() |
filters |
FormElementManager |
getFormElementConfig() |
form_elements |
HydratorManager |
getHydratorConfig() |
hydrators |
InputFilterManager |
getInputFilterConfig() |
input_filters |
RoutePluginManager |
getRouteConfig() |
route_manager |
SerializerAdapterManager |
getSerializerConfig() |
serializers |
ServiceLocator |
getServiceConfig() |
service_manager |
ValidatorManager |
getValidatorConfig() |
validators |
ViewHelperManager |
getViewHelperConfig() |
view_helpers |
LogProcessorManager |
getLogProcessorConfig |
log_processors |
LogWriterManager |
getLogWriterConfig |
log_writers |