Поведение Zend роутера
У меня проблемы с роутером.
У меня есть собственный маршрут:
$router->addRoute('showTopic',
new Zend_Controller_Router_Route('/forum/topic/:topic',
array('module' => 'forum',
'controller' => 'topic',
'action' => 'show'),
array('topic' => '\d+')));
Но когда я пытаюсь получить доступ к этому URL: localhost/forum/topic/16, я получаю эту ошибку:
Неустранимая ошибка: необработанное исключение "Zend_Controller_Router_Exception" с сообщением "тема не указана"
Но я не хочу ставить значение по умолчанию для темы, потому что я также хочу, чтобы маршрут / форум / тема перечислял все темы...
Во-вторых, я знаю, что если я добавлю пользовательский маршрут, маршрутизатор по умолчанию будет переопределен, но мне также нужно иметь несколько маршрутов по умолчанию. Единственный способ, который я нашел, это установить 'default' во втором параметре помощника вида url, вот так
$this->url(array(
'module' => 'forum',
'controller' => 'topic',
'action' => 'add'
), 'default', true)
Есть ли более элегантный способ вместо того, чтобы делать это для всех URL, где я хочу использовать поведение по умолчанию?
1 ответ
У вас должно быть значение по умолчанию для темы и добавить более общий маршрут (тот, что для форума / темы) после более конкретного. Route_Rewrite проверяет маршруты, начинающиеся с последнего (на самом деле выполняет array_inverse).
Помощник по URL-адресу делегирует URL-адреса сборки маршруту, второй параметр которого является именем маршрута, который нужно извлечь из маршрутизатора. Поскольку маршрут по умолчанию зарегистрирован под именем "default", в этом имени нет ничего действительно сложного (это не волшебная строка или особый случай). Если это действительно вас беспокоит, вы можете написать собственный помощник (который будет помещен в "views/helpers"):
class Zend_View_Helper_DefaultUrl extends Zend_View_Helper_Abstract {
public function defaultUrl($params) {
return $this->view->url($params, 'default');
}
}
И использовать его в вашем представлении как defaultUrl(array('action'=>'test'))?>.