8
Tạo module mới trong Zend Framework 2 Xem 'Bài 5 - Tạo trang 404 (Error page) trong Zend Framework 2' trước khi thực hành bài này - Trong phần này chúng ta sẽ tạo ra một MODULE mới để bài kế tiếp chúng ta sẽ nhúng một TEMPLATE có 5 layout khác nhau vào trong MODULE này - Tạo một thư mục có tên /Template trong thư mục /module có cấu trúc như sau: - Sau khi tạo xong chúng ta sẽ cấu hình để chạy được MODULE mới này - Mở tập tin /module/Template/src/Template/Controller/IndexController.php thêm vào nội dung sau: <?php namespace Template\Controller;

Khóa học Zend Framework 2 - Tạo module mới trong Zend Framework 2 - Bài 6

Embed Size (px)

DESCRIPTION

Khóa học Zend Framework 2 - Tạo module mới trong Zend Framework 2 - Bài 6. Tạo một module mới trong ZF2. Để tìm hiểu kỹ hơn các bạn hãy truy cập: Website: www.zend.vn Facebook: https://www.facebook.com/zendvngroup

Citation preview

Page 1: Khóa học Zend Framework 2 - Tạo module mới trong Zend Framework 2 - Bài 6

Tạo module mới trong Zend Framework 2

Xem 'Bài 5 - Tạo trang 404 (Error page) trong Zend Framework 2' trước khi thực hành bài này

- Trong phần này chúng ta sẽ tạo ra một MODULE mới để bài kế tiếp chúng ta sẽ nhúng một TEMPLATE có 5 layout khác nhau vào trong MODULE này

- Tạo một thư mục có tên /Template trong thư mục /module có cấu trúc như sau:

- Sau khi tạo xong chúng ta sẽ cấu hình để chạy được MODULE mới này

- Mở tập tin /module/Template/src/Template/Controller/IndexController.php thêm vào nội dung sau:

<?phpnamespace Template\Controller;

use Zend\Mvc\Controller\AbstractActionController;use Zend\View\Model\ViewModel;

class IndexController extends AbstractActionController{ public function indexAction() { //echo '<br />' . __METHOD__; } public function aboutAction() {

Page 2: Khóa học Zend Framework 2 - Tạo module mới trong Zend Framework 2 - Bài 6

//echo '<br />' . __METHOD__; } public function contactAction() { //echo '<br />' . __METHOD__; } public function newsAction() { //echo '<br />' . __METHOD__; } public function hairstyleAction() { //echo '<br />' . __METHOD__; }}

- Trong tập tin CONTROLLER này chúng ta tạo ra 5 ACTION tương ứng với 5 layouts chúng ta có trong TEMPLATE của chúng ta.

- Tiếp theo chúng tạo ra Namespace cho CONTROLLER này là 'namespace Template\Controller' Mỗi MODULE khác nhau chúng ta sẽ có Namespace khác nhau ví dụ:  Application MODULE chúng ta đặt tên là Application\Controller Shopping MODULE chúng ta đặt namespace là Shopping\Controller Template MODULE chúng ta đặt namespace là Template\Controller

- Tiếp theo chúng ta sẽ tạo 5 tập tin VIEW là index.phtml - about.phtml - contact.phtml - news.phtml - hairstyle.phtml trong thư mục /module/Template/view/template/index cho 5 ACTIOn trong IndexController với nội dung như sau:

Tập tin about.phtml

<h2>Template MODULE - aboutAction</h2>

Tập tin index.phtml

<h2>Template MODULE - indexAction</h2>

Tập tin contact.phtml

<h2>Template MODULE - contactAction</h2>

Tập tin news.phtml

<h2>Template MODULE - newsAction</h2>

Page 3: Khóa học Zend Framework 2 - Tạo module mới trong Zend Framework 2 - Bài 6

Tập tin hairstyle.phtml

<h2>Template MODULE - hairstyleAction</h2>

- Mở tập tin /module/Template/view/layout/layout.phtml thêm vào đoạn mã sau:

<?php echo $this->doctype(); ?><html lang="en"> <head> <meta charset="utf-8"> </head> <body> <h1>Hello World - Template</h1> <?php echo $this->content; ?> </body></html>

- Khi chúng ta thêm một MODULE mới vào ứng dụng chúng ta cũng cần khai báo MODULE này trong tập tin cấu hình của ứng dụng. Mở tập tin /config/application.config.php theo vào nội dung phần tử ‘modules’ giá trị ‘Template’

'modules' => array( 'Application', 'Template', ),

- Lúc này nội dung của tập tin /config/application.config.php sẽ như sau:

<?phpreturn array( //module là một mảng chứa tên 'namespaces' của các module trong ứng dụng 'modules' => array( 'Application', 'Template' ), // module_listener_options là một mảng chứa thông tin của Module // Mảng này được đưa vào phần quản lý Module (ModuleManager) 'module_listener_options' => array( //module_paths: là một mảng đường dẫn đến các thư mục //chứa các MODULE trong ứng dụng 'module_paths' => array( './module', './vendor', ), //config_glob_paths: là một mảng chứa các tập tin cấu hình của ứng dụng 'config_glob_paths' => array( 'config/autoload/{,*.}{global,local}.php', ), ), );

Page 4: Khóa học Zend Framework 2 - Tạo module mới trong Zend Framework 2 - Bài 6

- Tiếp theo chúng ta sẽ cấu hình MODULE. Để cấu hình cho MODULE chúng ta mở tập tin /module/Template/config/module.config.php thêm vào nội dung sau:

<?phpreturn array( );

- Tiếp theo chúng ta sẽ khai báo các CONTROLLER sẽ sử dụng trong MODULE và chúng ta thấy trong MODULE này chỉ có một CONTROLLER đó là IndexController

'controllers' => array( 'invokables' => array( 'Template\Controller\Index' => 'Template\Controller\IndexController' ),)

- Tiếp theo chúng ta sẽ thiết lập CONTROLLER mặc định và ROUTE cho URL của MODULE

'router' => array( 'routes' => array( 'template' => array( 'type' => 'Literal', 'options' => array( 'route' => '/template', 'defaults' => array( '__NAMESPACE__' => 'Template\Controller', 'controller' => 'Index', 'action' => 'index', ),//defaults ),//options 'may_terminate' => true, 'child_routes' => array( 'default' => array( 'type' => 'Segment', 'options' => array( 'route' => '/[:controller[/:action[/]]]', 'constraints' => array( 'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', ),//constraints 'defaults' => array( ),//defaults ),//options ),//default ),//child_routes ),//users ),//routes ),//router

- Cuối cùng chúng ta sẽ thiết lập đường dẫn đến thư mục chứa VIEW của MODULE này

'view_manager' => array( 'template_path_stack' => array( 'template' => __DIR__ . '/../view',

Page 5: Khóa học Zend Framework 2 - Tạo module mới trong Zend Framework 2 - Bài 6

), ),

- Nội dung tâp tin /module/Template/config/module.config.php sau khi cấu hình là

<?phpreturn array( 'controllers' => array( 'invokables' => array( 'Template\Controller\Index' => 'Template\Controller\IndexController' ), ), 'router' => array( 'routes' => array( 'template' => array( 'type' => 'Literal', 'options' => array( 'route' => '/template', 'defaults' => array( '__NAMESPACE__' => 'Template\Controller', 'controller' => 'Index', 'action' => 'index', ),//defaults ),//options 'may_terminate' => true, 'child_routes' => array( 'default' => array( 'type' => 'Segment', 'options' => array( 'route' => '/[:controller[/:action[/]]]', 'constraints' => array( 'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', ),//constraints 'defaults' => array( ),//defaults ),//options ),//default ),//child_routes ),//users ),//routes ),//router 'view_manager' => array( 'template_path_stack' => array( 'template' => __DIR__ . '/../view', ), ),);

- Cuối cùng chúng ta cần load tập tin cấu hình vào MODULE. Mở tập tin /module/Template/Module.php thêm vào nội dung sau

<?phpnamespace Template;

Page 6: Khóa học Zend Framework 2 - Tạo module mới trong Zend Framework 2 - Bài 6

use Zend\Mvc\ModuleRouteListener;use Zend\Mvc\MvcEvent;

class Module{ public function onBootstrap(MvcEvent $e) { $eventManager = $e->getApplication()->getEventManager(); $moduleRouteListener = new ModuleRouteListener(); $moduleRouteListener->attach($eventManager); }

public function getConfig() { return include __DIR__ . '/config/module.config.php'; }

public function getAutoloaderConfig() { return array( 'Zend\Loader\StandardAutoloader' => array( 'namespaces' => array( __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, ), ), ); }}

- Vậy là cấu hình xong MODULE ‘Template’. Bây giờ chúng ta hãy chạy thử các URL sau:o localhost:8000/zf2basic/public/template/

o localhost:8000/zf2basic/public/template/index/about

o localhost:8000/zf2basic/public/template/index/contact

o localhost:8000/zf2basic/public/template/index/hairstyle

o localhost:8000/zf2basic/public/template/index/news

Page 7: Khóa học Zend Framework 2 - Tạo module mới trong Zend Framework 2 - Bài 6

Download source here: http://www.zend.vn/download/pictures/zend-framework-2/03-create-a-module-in-Zend-Framework-2/03-create-a-module-in-Zend-Framework-2.zip