2015-09-24 13 views
10

Tôi đang sử dụng Zend F/W 1.12 để xây dựng một máy chủ REST. Một trong những yêu cầu của tôi là có một hành động nằm ngoài ranh giới của những gì Zend có thể nhận ra là hành động "Restfull". Điều tôi muốn nói là tôi muốn có một hành động được gọi là mymedia và muốn yêu cầu các tuyến đường được gửi đến // mymedia. Hiện nay, Zend hiểu nó như là id để một getAction và tắt khóa học này không phải là những gì tôi muốn.Thêm tuyến đường tùy chỉnh vào bộ điều khiển Zend REST

Mọi trợ giúp sẽ được đánh giá cao! Cảm ơn

Trả lời

0

Tôi đã từng viết một tuyến đường tùy chỉnh cho khung công tác zend 1 có thể xử lý các tuyến đường tùy chỉnh an toàn. nó phục vụ tôi tốt cho đến bây giờ. xem https://github.com/aporat/Application_Rest_Controller_Route để biết thêm chi tiết.

ví dụ, nếu bạn muốn có một url như /users/30/messages ánh xạ một cách chính xác vào một hành động điều khiển zend, sử dụng tuyến đường này trong bootstrap của bạn:

$frontController = Zend_Controller_Front::getInstance(); 
$frontController->getRouter()->addRoute('users-messages', new Application_Rest_Controller_Route($frontController, 'users/:user_id/messages', ['controller' => 'users-messages'])); 
+0

mặc dù nó là không chính xác câu trả lời nó đã chỉ cho tôi đúng hướng nên cảm ơn! cuối cùng tôi chỉ cần thêm một Zend_Route với điều khiển liên tục, mô-đun và hành động. – Alon1980

+0

Thật không may có vẻ như kho lưu trữ không còn khả dụng, do đó liên kết bị hỏng. –

3

Việc triển khai Zend_Rest_Route không cho phép nhiều tùy chỉnh nhưng thay vào đó cung cấp lược đồ định tuyến thô sơ cho việc sử dụng ngoài hộp.

Vì vậy, nếu bạn cần thay đổi cách thức URI được diễn giải, bạn có thể mở rộng các lớp Zend_Rest_Route, Zend_Controller_Router_Route_Module hoặc Zend_Controller_Router_Route_Abstract để tạo loại định tuyến của riêng bạn.

Hãy xem phương pháp match của các lớp đó và những gì chúng thực hiện - ví dụ: họ điền vào mảng thuộc tính $_values (trong khi tôn trọng các thuộc tính $_moduleKey, $_controllerKey$_actionKey).

Sau đó, bạn có thể thêm nó, ví dụ: như các tuyến đường đầu tiên trong lớp bootstrap của bạn:

$frontController = Zend_Controller_Front::getInstance(); 
$router = $frontController->getRouter(); 
$router->addRoute('myRoute', new My_Route($frontController)); 
$router->addRoute('restRoute', new Zend_Rest_Route($frontController)); 

Xem:

http://framework.zend.com/manual/1.12/en/zend.controller.router.html#zend.controller.router.basic

Routing là một quá trình đơn giản lặp qua tất cả các tuyến đường cung cấp và phù hợp với định nghĩa của nó để yêu cầu hiện tại URI. Khi một kết quả trùng khớp được tìm thấy, các giá trị biến được trả về từ cá thể Route và được tiêm vào đối tượng Zend_Controller_Request để sử dụng sau này trong bộ điều phối cũng như trong các bộ điều khiển do người dùng tạo ra. Trên kết quả đối sánh phủ định, tuyến đường tiếp theo trong chuỗi được chọn.

Các vấn đề liên quan