Khanh Hoang - Kenn
Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.
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.
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.
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') ) ) ) )
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( ), ), ), )
Đố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