Giới thiệu Tree Routing trong Zend Framework 2 - part 2

Giới thiệu Tree Routing trong Zend Framework 2 - part 2

Cải tiến hơn so với version 1, ZF2 không chỉ dừng lại ở mức routing cho từng path URI cụ thể. Đến với ZF2, chúng ta sẽ làm quen với khái niệm Tree Routing - hay có thể nói là làm sao kết nối các routing lại với nhau để tạo hiệu ứng tốt hơn cho việc làm đẹp url.

Ngoài ra, với tree routing còn giúp cải thiện tốc độ load web nhanh hơn. Nhưng đây cũng là một khái niệm khá mới nên có vẻ cũng hơi khó làm quen với nó. Mình cũng chỉ mới tập tành làm quen với dạng routing này.

1 - Cơ chế hoạt động

Một router bất kỳ có thể chứ nhiều (vô hạn) những router con của nó. Tuy nhiên, router con chỉ được kích hoạt khi router cha được khớp với URI. Một router con có thể là bất kỳ dạng routing nào đã được liệt kê ở phần 1.

Đối với ZF2, không có cơ chế mặc định cho việc routing, nên những route con chỉ có thể kích hoạt khi route cha có cài đặt khai báo "tao có con - nhớ tìm con tao".

2 - Kết nối nhiều route - tree routing

Trong khai báo route, chúng ta thêm phần chỉ định có route con như bên dưới để xác lập tree routing

array(
  'articles' => array(
    'type' => 'literal',
    'options' => array(
      'route' => '/articles', 'defaults' => array(
        'controller' => 'Application\Controller\Article',
        'action' => 'index'
      )
    ),
    'may_terminate' => true,
    'child_routes' => array(
      'details' => array(
        'type' => 'segment', 'route' => '/:id',
        'constraints' => array('articles' => '\d+'),
        'defaults' => array('action' => 'details')
      )
    )
  )
)

3 - Sử dụng WildCard để giống ZF1

Nếu bạn từng là 1 tín đồ của ZF1, thì việc route mặc định của ZF1 có phần tự động hiểu các tham số phát sinh thêm do người tự nhập vào. Chúng ta cũng có thể tái thiết lập định dạng này ở ZF2 như sau:

array(
  'type' => 'segment',
  'options' => array(
    'route' => '/application[/:controller][/:action][/:id]',
    'constraints' => array(
      'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
      'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
      'id' => '[0-9]+',
    ),
    'defaults' => array(
      '__NAMESPACE__' => 'Application\Controller',
      'controller' => 'Index',
      'action' => 'index',
    ),
  ),
  'may_terminate' => true,
  'child_routes' => array(
    'default' => array(
      'type' => 'Wildcard',
      'options' => array(
      ),
    ),
  ),
)

4 - Nhận tham số khớp route

Đối với ZF1, việc nhận tham số request rất đơn giản bằng phương thức sau ở tầng controller:
$this->_request->getParam('key', 'default-value'); hoặc
$this->_request->getParams();

Nhưng đối với ZF2, thì chúng ta nhận tham số khớp route bằng phương thức sau ở tầng controller:
$this->getEvent()->getRouteMatch()->getParam('key', 'default-value'); hoặc
$this->getEvent()->getRouteMatch()->getParams();

Theo Minh Quang Trần 

Link gốc: http://tmquang6805.blogspot.com/2013/03/zend-framework-2-routing-part-2.html

Bạn thấy bài viết này như thế nào?: 
No votes yet
Ảnh của Khanh Hoang

Khanh Hoang - Kenn

Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Co phieu samsung

Sau vụ kiện với Apple cổ phiếu Samsung giảm 7%

Cổ phiếu của hãng điện tử khổng lồ Hàn Quốc đã giảm tới 7% sau vụ kiện với Apple. Đây là mức giảm thấp kỉ lục nhất trong 4 năm qua.

Bài 1 và 2: Hello World: Develop Node.js toàn tập

Bài 1 và 2: Hello World: Develop Node.js toàn tập

Mình sẽ thấy ở terminal ngưng lại không có dấu prompt. Có nghĩa program node.js đang chạy ngay trên terminal.

Hướng dẫn upgrading lên Drupal 8 - client bắt mắt

Hướng dẫn upgrading lên Drupal 8 - client bắt mắt

Having helped create the original Drupal 6 site for NAMA in 2008, it’s been a rewarding experience re-architecting it in Drupal 8 (beta).

Công ty diệt chuột T&C

 

Diet con trung