Добавление настраиваемого маршрута в контроллер 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 для последующего использования в диспетчере, а также в пользовательских контроллерах. При отрицательном результате сопоставления проверяется следующий маршрут в цепочке.