Trang chủ » Kho tài liệu » Lập Trình với Zend Framework


Cập nhật ngày: 4/22/2015 4:52:44 PM

Bài 3 – Module trong Zend Framework



Tìm hiểu về cấu trúc một module trong Zend Framework. Trong bài này chúng ta sẽ xem qua module Application, là một module có sẵn trong Zend Framework.


Tìm hiểu về cấu trúc một module trong Zend Framework. Trong bài này chúng ta sẽ xem qua module Application, là một module có sẵn trong Zend Framework.

 


Truy cập vào zendtuts/module/, bạn sẽ thấy thư mục Application. Dưới đây là cấu trúc của module Application

1
2
3
4
5
6
7
8
9
10
11
12
13
module
---Application
------config
------language
------src
---------Application
------------Controller
------view
---------application
------------index
---------error
---------layout
---------Module.php

Module.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
/**
 * Zend Framework (http://framework.zend.com/)
 *
 * @link      http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository
 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
 * @license   http://framework.zend.com/license/new-bsd New BSD License
 */
 
namespace Application;
 
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__,
                ),
            ),
        );
    }
}

Dòng đầu tiên của file này đăng ký namespace của module. Trong zend framework 2 sử dụngModuleManager, nó sẽ chủ động tìm kiếm đến file Module.php này và tìm đến class Module.

Phương thức onBootstrap thường được dùng để lắng nghe(listen) các sự kiện(event) và khởi tạo ModuleManager cho module. Điều đó có nghĩa bạn có thể thêm các sự kiện tới ModuleManager.

Phương thức getAutoloaderConfig trả về một mảng, trong đó có đường dẫn của file trong module hiện tại và namespace của module. Thông thường StandardAutoloader yêu cầu một namespace và đường dẫn đến namespace đó.

Phương thức getConfig đơn giản chỉ gọi đến file config/module.config.php.

config/module.config.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
/**
 * Zend Framework (http://framework.zend.com/)
 *
 * @link      http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository
 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
 * @license   http://framework.zend.com/license/new-bsd New BSD License
 */
 
return array(
    'router' => array(
        'routes' => array(
            'home' => array(
                'type' => 'Zend\Mvc\Router\Http\Literal',
                'options' => array(
                    'route'    => '/',
                    'defaults' => array(
                        'controller' => 'Application\Controller\Index',
                        'action'     => 'index',
                    ),
                ),
            ),
            // The following is a route to simplify getting started creating
            // new controllers and actions without needing to create a new
            // module. Simply drop new controllers in, and you can access them
            // using the path /application/:controller/:action
            'application' => array(
                'type'    => 'Literal',
                'options' => array(
                    'route'    => '/application',
                    'defaults' => array(
                        '__NAMESPACE__' => 'Application\Controller',
                        'controller'    => 'Index',
                        'action'        => 'index',
                    ),
                ),
                '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_-]*',
                            ),
                            'defaults' => array(
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),
    'service_manager' => array(
        'abstract_factories' => array(
            'Zend\Cache\Service\StorageCacheAbstractServiceFactory',
            'Zend\Log\LoggerAbstractServiceFactory',
        ),
        'aliases' => array(
            'translator' => 'MvcTranslator',
        ),
    ),
    'translator' => array(
        'locale' => 'en_US',
        'translation_file_patterns' => array(
            array(
                'type'     => 'gettext',
                'base_dir' => __DIR__ . '/../language',
                'pattern'  => '%s.mo',
            ),
        ),
    ),
    'controllers' => array(
        'invokables' => array(
            'Application\Controller\Index' => 'Application\Controller\IndexController'
        ),
    ),
    'view_manager' => array(
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_map' => array(
            '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' => array(
            __DIR__ . '/../view',
        ),
    ),
    // Placeholder for console routes
    'console' => array(
        'router' => array(
            'routes' => array(
            ),
        ),
    ),
);

Đây là nơi đăng ký router(đường dẫn url trỏ đến controller và action tương ứng), service_manager(báo cho ZF2 biết chúng ta đang sử dụng Zend\Db\Adapter\AdapterServiceFactory factory), translator(sử dụng các gói ngôn ngữ)
, controllers(cung cấp một danh sách các controller mà module sử dụng), view_manager(cung câp một danh sách các view mà module sử dụng).

src/Application/Controller/IndexController.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
/**
 * Zend Framework (http://framework.zend.com/)
 *
 * @link      http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository
 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
 * @license   http://framework.zend.com/license/new-bsd New BSD License
 */
 
namespace Application\Controller;
 
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
 
class IndexController extends AbstractActionController
{
    public function indexAction()
    {
        return new ViewModel();
    }
}

Đây là controller chính và cũng là controller duy nhất của module này. Trong IndexController chỉ có duy nhất một action là indexAction và nó làm một nhiệm vụ duy nhất là load view.

view

Tất cả các file view đều phải có phần mở rộng là phtml. Có thể thấy cấu trúc của view khá dễ để suy luận.

view/application/index/ : Đây là view chính.
view/application/eror/ : Đây là view 404 hoặc báo lỗi.
view/application/layout/ : cấu trúc html chính của ứng dụng.

Và mỗi view này đều đã được config để nêu rõ chức năng và cách hiển thị trong config/module.config.php, view_manager.




Nguồn: vietobject