Zend Rest Router испортил маршрутизацию для контроллера по умолчанию
Я реализовал сервис RESTful, расширив Zend_Rest_Controller. Сервис работает отлично. У меня есть только один контроллер, который на самом деле имеет поведение RESTful. Поэтому я добавил маршрут отдыха только для этого контроллера в начальной загрузке.
protected function _initRestRoute()
{
$this->bootstrap('frontController');
$frontController = Zend_Controller_Front::getInstance();
$restRoute = new Zend_Rest_Route($frontController, array() , array('default' => array('MyserviceController')));
$frontController->getRouter()->addRoute('rest', $restRoute);
}
проблема начинается, когда я запускаю свое приложение zend для портала. Ссылки в макете для контроллера индекса упускают параметр action при создании URL-адреса. Например, ссылка на макет индекса для домашней страницы действия в сетевом контроллере выглядит следующим образом.
$this->url(array('controller'=>'network','action'=>'homepage','module'=>'default'));
это должно вернуть "localhost/projectname/public/network/homepage", вместо этого он возвращает "localhost/projectname/public/network". Это происходит только тогда, когда макет загружается контроллером по умолчанию, то есть IndexController. Проблема маршрутизации исчезает, если я удаляю Zend Rest Route из начальной загрузки. Пока я упоминаю, к какому контроллеру должен направляться запрос rest, проблема не должна быть правильной. Но это влияет на маршрутизацию контроллера по умолчанию.
1 ответ
Это кажется распространенной проблемой и обычно решается с помощью чего-то вроде:
$this->url(array('controller'=>'network','action'=>'homepage','module'=>'default'), 'default');
или же:
$this->url(array('controller'=>'network','action'=>'homepage','module'=>'default'), NULL, TRUE);
может работать.
если твой 'module'=>'default'
каталог контроллеров по умолчанию в/application/controllers
Вы можете пропустить опцию модуля из маршрута.
Вот весь метод URL, обратите внимание на комментарии для опции сброса.
/**
* Generates an url given the name of a route.
*
* @access public
*
* @param array $urlOptions Options passed to the assemble method of the Route object.
* @param mixed $name The name of a Route to use. If null it will use the current Route
* @param bool $reset Whether or not to reset the route defaults with those provided
* @return string Url for the link href attribute.
*/
public function url(array $urlOptions = array(), $name = null, $reset = false, $encode = true)
{
$router = Zend_Controller_Front::getInstance()->getRouter();
return $router->assemble($urlOptions, $name, $reset, $encode);
}