Giới thiệu chức năng Routing trong Zend Framework 2 - Part 1

Giới thiệu chức năng Routing trong Zend Framework 2 - Part 1

Trong ZF2 chức năng routing được thay đổi rất đáng kể so với ZF1. Đối với ZF2, sẽ không còn cái được gọi là routing mặc định để áp dụng cho tất cả những uri được request tới. Mà thay vào đó là mọi router đều phải được đăng ký. Việc này sẽ làm cho lập trình viên hơi bị mệt nhọc và nặng nề cho việc viết rule routing, tuy nhiên nó lại giúp cho ứng dụng ZF2 chạy nhanh hơn.

Việc cải tiến nữa trong routing ZF2 đó là cơ chế routing cơ bản nhất cũng yêu cầu sử dụng regular expression - cái thứ mà rất làm nản lòng dân developer.

Bài viết sẽ cố gắng giúp mọi người có thể cài đặt routing trong ZF2 và cũng không dám mong rằng đây là một hướng dẫn xuyên suốt cho phần routing ZF2

1 - Path routes - Dạng route căn bản và đơn giản trong ZF2

1.1 - Literal route

Đây là dạng route đơn giản nhất trong ZF2. Nếu chúng ta đã từng làm quen với hệ thống route ở ZF1 thì đây có thể giống với anh chàng Zend_Controller_Router_Route_Static. Điều này có nghĩa là so sánh trùng khớp tuyệt đối URI với route được thiết lập, và không được nhận diện tham số trong route.

array(
   'articles' => array(
     'type' => 'literal',
     'options' => array(
       'route' => '/articles',
       'defaults' => array(
         'controller' => 'Application\Controller\Article',
         'action'   => 'list',
       )
     )
   )
) 

1.2 - Regex route

Đây là dạng route dựa trên việc so sánh regular expression. Điều này khá giống với Zend_Controller_Router_Route_Regex của ZF1. Tuy nhiên, có đôi chút khác biệt đó là trong ZF2 sẽ dùng cơ chế "named subpattern" được hỗ trợ từ PHP 5.3 nhằm hạn chế bớt tham số trong việc đặt lại tên cho các tham số truyền vào.

array(
   'article-details' => array(
     'type' => 'regex',
     'options' => array(
       'route' => '/articles/(?P<id>\d+)',
       'spec' => '/articles/%id%',
       'defaults' => array(
         'controller' => 'Application\Controller\Article',
         'action'   => 'details',
       )
     )
   )
)

1.3 - Wildcard route

Đây là dạng route không giới hạn về cặp key/value trên URI của request. Hành động này rất giống với route mặc định trong ZF1, nhằm giúp cơ chế route linh động hơn. Mặt không tốt của dạng route này là không kiểm soát được dữ liệu truyền đi của user.

array(
   'wildcard' => array(
     'type' => 'wildcard',
     'options' => array(
       'key_value_delimiter' => '/',
       'param_delimiter'   => '/'
     )
   )
)

1.4 - Segment route

Đây là dạng route dựa trên từng đoạn trên URI, route này rất giống với Zend_Controller_Router_Route trong ZF1. Tuy nhiên, có phần khác biệt đó là chúng ta phải đặt phần constraints cho các segment động (thông thường là các thông số truyền vào) - đây là điều mệt mỏi cho dân lập trình vì lại phải ứng dụng regular expression trong đây.

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

Điểm thú vị bất ngờ trong segment route của ZF2 đó là tham số sẽ được nối bởi dấu hai chấm. Những tham số đứng trước dấu hai chấm là tham số bắt buộc, tham số đứng sau dấu hai chấm là tham số tùy chọn.

Ví dụ:
/articles[/page-:pageNo]
Khớp với "/articles""/articles/page-1"

/articles/[page-:pageNo]
Khới với "/articles/""/articles/page-1"

/articles/:id{-}-:text
Khớp với "/articles/194-my-awesome-article"  và "/articles/foo/bar/baz-my-awesome-article"

/conferences/:conference{0-9}::year
Khớp với "/conferences/zendcon2012""/conferences/dpc2010"

Theo Minh Quang Trần 

Blog:   http://tmquang6805.blogspot.com

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

 
VMware Workstation 7.0.1 - tạo win ảo và mạng ảo pro

VMware Workstation 7.0.1 - tạo win ảo và mạng ảo pro

Từ các tác giả của ảo hóa máy tính đến cách thức, đáng tin cậy nhất an toàn để chạy nhiều hệ điều hành cùng một lúc.

4 tính năng Timeline bạn nên biết

4 tính năng Timeline bạn nên biết

Mặc dù không quá nổi bật nhưng những tính năng này rất đáng chú ý, giúp bạn quản lí chặt chẽ hơn trang Timeline lung linh của mình.

10 điểm Kindle Fire 2 cần có để đọ với Nexus 7

10 điểm Kindle Fire 2 cần có để đọ với Nexus 7

Phần cứng của Nexus 7 vượt hẳn Kindle Fire 2 dù cùng mức giá. Vì thế nhiều người tin rằng Kindle Fire thế hệ hai sẽ có bộ xử lí lõi tứ, màn hình xịn hơn, thiết kế đẹp mắt và nhiều "vũ khí" khác để đấu lại MTB của Google.

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

 

Diet con trung