[ZF2] Cấu hình Routing và Controllers – Phần 2
|Trong bài viết Tạo module trong Zend Framework 2, chúng ta đã biết được các dự án Zend Framework 2 có thể xây dựng – mở rộng bằng những module hỗ trợ; và tôi đã hướng dẫn các bạn tạo một module Album giúp quản lý – tìm kiếm bộ sưu tập nhạc, nhưng nó vẫn chưa thể hoạt động bởi chưa có bất cứ cài đặt cấu hình, xử lý nghiệp vụ nào. Trong bài viết này, chúng ta sẽ xây dựng một trang quản lý rất đơn giản như thêm – xóa -sửa và hiển thị toàn bộ sưu tập nhạc. Do đó chúng ta sẽ tạo ra các trang như sau đây:
Trang | Mô tả |
Trang chủ | Trang này sẽ hiển thị danh sách các album và cung cấp liên kết để chỉnh sửa và xóa chúng. Ngoài ra, một liên kết để cho phép thêm album mới sẽ được cung cấp. |
Thêm album mới | |
Chỉnh sửa album | Trang giúp chỉnh sửa thông tin của album |
Xóa album | Trang thực hiện xóa những album không cần thiết |
Trước khi thiết lập các tập tin cần thiết, chúng ta cần phải hiểu được các trang sẽ được tổ chức như thế nào để có thể dễ dàng phát triển trong zf2. Mỗi một trang được hiển thị tương ứng với một action cụ thể, những action này là các phương thức xử lý chứa trong controller của từng module, chúng ta sẽ nhóm các action vào trong một controller.
Chúng ta sẽ có tất cả 4 trang để áp dụng cho toàn bộ album nhạc tương ứng với 4 action xử lý trong một controller duy nhất là AlbumController đặt trong module Album.
Trang | Controller | Action |
Trang chủ | AlbumController | index |
Thêm album mới | AlbumController | add |
Chỉnh sửa album | AlbumController | edit |
Xóa album | AlbumController | delete |
Các bạn sẽ cấu hình cài đặt module Album trong tập tin module.config.php như sau:
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 |
return array( 'controllers' => array( 'invokables' => array( 'Album\Controller\Album' => 'Album\Controller\AlbumController', ), ), // The following section is new and should be added to your file 'router' => array( 'routes' => array( 'album' => array( 'type' => 'segment', 'options' => array( 'route' => '/album[/][:action][/:id]', 'constraints' => array( 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 'id' => '[0-9]+', ), 'defaults' => array( 'controller' => 'Album\Controller\Album', 'action' => 'index', ), ), ), ), ), 'view_manager' => array( 'template_path_stack' => array( 'album' => __DIR__ . '/../view', ), ), ); |
Hệ thống route sẽ giúp chúng ta xác định được controller và action cần xử lý. Ở đây, tôi khai báo một route có tên là album
thuộc kiểu segment
(Chúng ta sẽ tìm hiểu chi tiết về phần Routing trong các bài viết tiếp theo), và route chỉ định là ‘/album[/:action][/:id]‘ nó giúp so khớp tất cả các URL được bắt đầu bởi /album. Thành phần ‘[/:action][/:id]‘ sẽ chỉ đinh action xử lý có thể là add/edite/delete, chúng được bao bởi cặp dấu ‘[ ]‘ để xác định đây là một thành phần có thể có hoặc không xuất hiện trên URL. Cấu hình ‘constraints‘ là một ánh xạ giữa tham số và biểu thức chính quy, giúp valid các giá trị mà tham số nhận được, ví dụ như action
có thể chấp nhận các giá trị bởi các chữ cái la-tin và số
1 |
'action' => '[a-zA-Z][a-zA-Z0-9_-]*', |
URL | Trang | Action |
/album | Trang chu hiển thị album | index |
/album/add | Thêm album mới | add |
/album/edit/2 | Chỉnh sửa album có id = 2 | edit |
/album/delete/5 | Xóa album có id = 5 | delete |
Tạo AlbumController
Trong Zend Framework 2, các lớp controller sẽ được đặt tên theo quy tắc {Controller Name}Controller, các tên của lớp được theo sau bởi ‘Controller‘ và tên lớp phải được bắt đầu bởi chữ cái la-tin viết hoa. Các lớp controller sẽ được trong các tập tin có tên tương tự tên lớp {Controller Name}Controller.php và được đặt trong thư mục module/Album/src/Album/Controller . Các action được đặt trong lớp có quy tắc đặt tên {Action Name}Action, chúng là những phương thức truy nhập public và tên action được viết thường.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
namespace Album\Controller; use Zend\Mvc\Controller\AbstractActionController; use Zend\View\Model\ViewModel; class AlbumController extends AbstractActionController { public function indexAction() { } public function addAction() { } public function editAction() { } public function deleteAction() { } } |
Lưu ý:
- Bạn phải đảm bảo module Album đã được khai báo trong phần ‘modules‘ của tập tin cấu hình ‘config\application.config.php‘. Và bạn cũng phải cung cấp lớp Module cho module Album để được xác nhận với mô hình MVC.
- Đã khai báo controller ‘Album\Controller\Controller’ trong phần ‘controllers‘ của tập tin module.config.php
Chúng ta đã thiết lập 4 action mà chúng ta muốn sử dụng. Các URL cho mỗi action là:
Phương thức | Phương thức xử lý |
http://zf2-tutorial.localhost/album | Album\Controller\AlbumController::indexAction |
http://zf2-tutorial.localhost/album/add | Album\Controller\AlbumController::addAction |
http://zf2-tutorial.localhost/album/edit | Album\Controller\AlbumController::editAction |
http://zf2-tutorial.localhost/album/delete | Album\Controller\AlbumController::deletedAction |
Bây giờ chúng ta có một bộ định tuyến router làm việc và các action được thiết lập cho mỗi trang của ứng dụng.
Khởi tạo thành phần View
Mỗi một action sẽ trả ra một view tương ứng để hiển thị nôi dung. Những tập tin hiển thị này sẽ được thực hiện bởi các DefaultViewStrategy và nó sẽ nhận các biến dữ liệu trả ra từ controller – action để hiển thị dữ liệu. Các tập tinh view script được lưu trữ trong thư mục trong module/Album/view/album/album và tên được trùng với tên action.
- module/Album/view/album/album/index.phtml
- module/Album/view/album/album/add.phtml
- module/Album/view/album/album/edit.phtml
- module/Album/view/album/album/delete.phtml
Kết luận
Như vậy , chúng ta đã hoàn tất quá trình cấu hình cài đặt routing – controller – view để chuẩn bị cho các bước xây dựng tiếp theo như thao tác với database, hiển thị dữ liệu, tiếp nhận các yêu cầu gửi lên… Để có thể hoàn tất quá trình cài đặt mời các bạn đọc theo dõi những bài viết về Zend Framework của kienthucweb.net