7
Tạo ACTION trong Zend Framewok 2 Xem trước 'Bài 2 - Cài đặt và cấu hình Zend Framework 2' trước khi thực hành bài này - Mở tập tin /module/Application/src/Application/Controller/IndexControlle r.php thêm vào tập tin này một ACTION mới tên là abcAction() có nội dung như sau: public function abcAction(){ //In ra tên của phương thức abcAction echo '<br />' . __METHOD__; //Khởi tạo đối tượng ViewModel và chuyền giá vào đối tượng $view = new ViewModel(array('website'=>'Chào mừng các bạn đến với website www.zend.vn')); //Truyền đối tượng ViewModel ra ngoài VIEW return $view; } - Khi chúng ta tạo một ACTION thì chúng ta phải tạo VIEW để hiển thị dữ liệu được truyền ra trong Action này. Vì vậy khi chúng ta tạo ra ACTION có tên abcAction() thì chúng ta cần phải tạo ra một tập tin VIEW tương ứng cho nó có tên abc.phtml trong thư mục /module/Application/view/application/index với nội dung như sau: - <h2>Truy cập phương thức abcAction</h2> <div id="content"> <?php echo $this->website; ?> <?php echo '<br/>' . __FILE__; ?> </div> - Bây giờ chúng ta hãy thử truy xuất vào abcAction() theo cú pháp sau localhost:8080/zf2basic/public/{module name}/{controller name}/{action name} - Truy cập URL: http://localhost:8000/zf2basic/public/appliction/index/abc

Giáo trình Zend Framework 2.0 - Tạo ACTION trong Zend Framework 2 - Bài 3

Embed Size (px)

DESCRIPTION

Giáo trình Zend Framework 2.0 - Tạo ACTION trong Zend Framework 2 - Bài 3. Hướng dẫn tạo một Action 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: Giáo trình Zend Framework 2.0 - Tạo ACTION trong Zend Framework 2 - Bài 3

Tạo ACTION trong Zend Framewok 2

Xem trước 'Bài 2 - Cài đặt và cấu hình Zend Framework 2' trước khi thực hành bài này

- Mở tập tin /module/Application/src/Application/Controller/IndexController.php thêm vào tập tin này một ACTION mới tên là abcAction() có nội dung như sau:

public function abcAction(){ //In ra tên của phương thức abcAction echo '<br />' . __METHOD__; //Khởi tạo đối tượng ViewModel và chuyền giá vào đối tượng $view = new ViewModel(array('website'=>'Chào mừng các bạn đến với website www.zend.vn')); //Truyền đối tượng ViewModel ra ngoài VIEW return $view; }

- Khi chúng ta tạo một ACTION thì chúng ta phải tạo VIEW để hiển thị dữ liệu được truyền ra trong Action này. Vì vậy khi chúng ta tạo ra ACTION có tên abcAction() thì chúng ta cần phải tạo ra một tập tin VIEW tương ứng cho nó có tên abc.phtml trong thư mục  /module/Application/view/application/index với nội dung như sau: 

-<h2>Truy cập phương thức abcAction</h2><div id="content"> <?php echo $this->website; ?> <?php echo '<br/>' . __FILE__; ?></div>

- Bây giờ chúng ta hãy thử truy xuất vào abcAction() theo cú pháp saulocalhost:8080/zf2basic/public/{module name}/{controller name}/{action name}

- Truy cập URL: http://localhost:8000/zf2basic/public/appliction/index/abc

- Có 2 vấn đề chúng ta cần quan tâm khi xảy ra lỗi kiểu này

Page 2: Giáo trình Zend Framework 2.0 - Tạo ACTION trong Zend Framework 2 - Bài 3

- Chưa có Controller hoặc Action hoặc View- Cấu hình router trong tập tin /module/Application/config/module.config.php chưa đúng

- Trong trường hợp này thì chúng ta có đầy đủ Controller – Action – View vì vậy nó có thể rơi vào trường hợp thứ 2. 

- Mở tập tin /module/Application/config/module.config.php thêm vào nội dung sau:

//START - Them router cho MODULE Application'application' => array( 'type' => 'Literal', 'options' => array( 'route' => '/application', 'defaults' => array( '__NAMESPACE__' => 'Application\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'),//'application'//END - Them router cho MODULE Application

- Sau khi đưa thêm đoạn mã trên vào nội dung đầy đủ tập tin /module/Application/config/module.config.php của chúng ta như sau:

<?phpreturn array( 'router' => array( 'routes' => array( 'home' => array( 'type' => 'Literal', 'options' => array( 'route' => '/', 'defaults' => array( '__NAMESPACE__' => 'Application\Controller', 'controller' => 'Index', 'action' => 'index', ),//'defaults' ),//'options' ),//'home' //START - Them router cho MODULE Application 'application' => array( 'type' => 'Literal',

Page 3: Giáo trình Zend Framework 2.0 - Tạo ACTION trong Zend Framework 2 - Bài 3

'options' => array( 'route' => '/application', 'defaults' => array( '__NAMESPACE__' => 'Application\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' ),//'application' //END - Them router cho MODULE Application ),//'routes' ), //'router' //Bat buoc phai co khong thi se co loi 'controllers' => array( 'invokables' => array( 'Application\Controller\Index' => 'Application\Controller\IndexController' ), ), //Bat buoc phai co thì mới load duoc View 'view_manager' => array( 'doctype' => 'HTML5', 'template_path_stack' => array( __DIR__ . '/../view', ), ));

Lúc này chúng ta sẽ chạy thử các đường dẫn sau:http://localhost:8000/zf2basic/public/ (1)http://localhost:8000/zf2basic/public/application (2)http://localhost:8000/zf2basic/public/application/ (3)

Page 4: Giáo trình Zend Framework 2.0 - Tạo ACTION trong Zend Framework 2 - Bài 3

- 2 URL (2) và (3) có vẻ giống nhau nhưng URL (3) có dấu / ở cuối.- Khi chạy 3 đường dẫn này chúng ta đều truy xuất vào IndexController – indexAction của

MODULE Application- Chúng ta chạy được 2 URL (2) và (3) là nhờ đoạn cấu hình này.

'application' => array( 'type' => 'Literal', 'options' => array( 'route' => '/application', 'defaults' => array( '__NAMESPACE__' => 'Application\Controller', 'controller' => 'Index', 'action' => 'index', ),//'defaults'

Chạy thử các đường dẫn sau:http://localhost:8000/zf2basic/public/application/index/abc (4)http://localhost:8000/zf2basic/public/application/index/abc/ (5)

Page 5: Giáo trình Zend Framework 2.0 - Tạo ACTION trong Zend Framework 2 - Bài 3

- 2 URL (4) và (5) có vẻ giống nhau nhưng URL thứ 4 có dấu / ở cuối. - Khi chạy 2 đường dẫn này chúng ta đều truy xuất vào IndexController – abcAction của

MODULE Application

- Chúng ta chạy được 2 URL (4) và (5) là nhờ đoạn cấu hình này. 

'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'

- Chú ý vấn đề cấu hình router trong ZF2 để chạy được URL, đôi khi sẽ làm các bạn thấy khó chịu vì hay gây ra lỗi và URL có dấu / ở cuối cấu khác với URL không có dấu / . Nhưng sau khi bạn đã hiểu rõ được bản chất vấn đề của Zend/Router bạn sẽ thấy nó rất linh hoạt và cho bạn tạo ra những đường dẫn đúng như ý bạn muốn.

- Nếu chúng nhìn lại IndexController thì chúng ta thấy các ACTION của chúng ta tên chỉ có một từ như ‘index’, ‘abc’. Vậy nếu tên ACTION của chúng ta có 2 từ trở lên thì chúng ta đặt tên như thế nào cho ACTION và VIEW. Qui tắc đặt tên cũng tương tự như Zend Framework 1.

- Ví dụ: Tôi muốn xây dựng một ACTION có tên ‘view detail’ thì lúc này chúng ta đặt tên cho ACTION là viewDetailAction(). Khi nhìn chữ ‘viewDetail’ thì chúng ta dễ đọc hơn là ‘viewdetail’

- Mở tập tin /module/Application/src/Application/Controller/IndexController.php thêm vào tập tin này một ACTION mới tên là viewDetailAction() có nội dung như sau:

public function viewDetailAction(){ //In ra tên của phương thức abcAction echo '<br />' . __METHOD__; //Khởi tạo đối tượng ViewModel và chuyền giá vào đối tượng $view = new ViewModel(array('website'=>'Chào mừng các bạn đến với website www.zend.vn')); //Truyền đối tượng ViewModel ra ngoài VIEW return $view; }

- Tiếp theo chúng ta cần tạo ra một VIEW tương ứng với viewDetailAction(). Khi tên ACTION là ‘viewDetail’ thì lúc này tên của VIEW sẽ làm view-detail.phtml.

Page 6: Giáo trình Zend Framework 2.0 - Tạo ACTION trong Zend Framework 2 - Bài 3

- Chúng ta tạo tập tin /module/Application/view/application/index/view-detail.phtml có nội dung sau:

<h2>Truy cập phương thức viewDetailAction</h2><div id="content"> <?php echo $this->website; ?> <?php echo '<br/>' . __FILE__; ?></div>

- Chúng ta chạy thử URL: http://localhost:8000/zf2basic/public/application/index/view-detail

Download source here: http://www.zend.vn/download/pictures/zend-framework-2/02-xay-dung-controller-view-error-page/02-xay-dung-controller-view-error-page.zip