Добавление настраиваемого маршрута в контроллер Zend REST
Я использую Zend F/W 1.12 для создания сервера REST.
Одним из моих требований является действие, которое выходит за рамки того, что Zend может распознать как действие "Restfull". Я имею в виду, что я хотел бы иметь действие, которое называется чем-то вроде mymedia, и хотел бы, чтобы запросы маршрутов tou направлялись в //mymedia. В настоящее время Zend понимает это как идентификатор getAction и, конечно же, это не то, что я хочу.
Любая помощь будет высоко оценена!
Благодаря
Ответы
Ответ 1
Я как-то написал собственный маршрут для zend framework 1, который может обрабатывать настраиваемые спокойные маршруты. это послужило мне до сих пор. Подробнее см. https://github.com/aporat/Application_Rest_Controller_Route.
например, если вы хотите, чтобы URL-адрес, например /users/30/messages
, правильно преобразован в действие контроллера zend, используйте этот маршрут в своем бутстрапе:
$frontController = Zend_Controller_Front::getInstance();
$frontController->getRouter()->addRoute('users-messages', new Application_Rest_Controller_Route($frontController, 'users/:user_id/messages', ['controller' => 'users-messages']));
Ответ 2
Реализация Zend_Rest_Route
не позволяет много настраивать, но вместо этого обеспечивает рудиментарную схему маршрутизации для использования вне коробки.
Итак, если вам нужно изменить способ интерпретации URI, вы можете расширить класс Zend_Rest_Route
, Zend_Controller_Router_Route_Module
или Zend_Controller_Router_Route_Abstract
, чтобы создать свой собственный маршрут маршрутизации.
Посмотрите на метод match
этих классов и то, что они делают - например. они заполняют массив свойств $_values
(при соблюдении свойств $_moduleKey
, $_controllerKey
и $_actionKey
).
Затем вы можете добавить его, например. как первый маршрут в вашем классе начальной загрузки:
$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();
$router->addRoute('myRoute', new My_Route($frontController));
$router->addRoute('restRoute', new Zend_Rest_Route($frontController));
См:
http://framework.zend.com/manual/1.12/en/zend.controller.router.html#zend.controller.router.basic
Маршрутизация - это простой процесс итерации по всем предоставленным маршрутам и сопоставление его определений с текущим URI запроса. Когда найдено положительное совпадение, переменные значения возвращаются из экземпляра Route и вводятся в объект Zend_Controller_Request для последующего использования в диспетчере, а также в пользовательских контроллерах. При отрицательном результате сопоставления проверяется следующий маршрут в цепочке.