Я использую Zend framework 1.12, пытаюсь создать собственные маршруты.
Я пытаюсь создать что-то похожее на URL-адрес профиля facebook (http://facebook.com/username) . Итак, сначала я попробовал что-то вроде этого:
$router->addRoute(
'eventName',
new Zend_Controller_Router_Route(
'/:eventName',
array(
'module' => 'default',
'controller' => 'event',
'action' => 'detail'
)
)
);
Каждый раз, когда я пытался запустить mydomain.com/something, я получал следующую ошибку:
Неустранимая ошибка: неперехваченное исключение «Zend_Controller_Router_Exception» с сообщением «eventName не указано» в /var/desenvolvimento/padroes/zf/ZendFramework-1.12.0/library/Zend/Controller/Plugin/Broker.php в строке 336
Мало того, что я не смог заставить этот фрагмент кода работать, все мои маршруты по умолчанию (очевидно) были перезаписаны. Итак, у меня есть, например, такие вещи, как «mydomain.com/admin», которые должны отправить меня в модуль «admin» на контроллере индекса, но теперь возвращают ту же ошибку (поскольку она соответствует той же схеме, что и /: название события).
Что мне нужно сделать, так это создать этот настраиваемый маршрут, не перезаписывая маршруты по умолчанию и фактически работающий (dh).
Я уже проверил онлайн-документы и много (МНОГО) материала в Google, но я не нашел ничего, связанного с получаемой мной ошибкой или тем, как не перезаписывать маршруты по умолчанию. Буду признателен за все, что укажет мне правильное направление.
Спасибо.
РЕДАКТИРОВАТЬ: Мне удалось заставить его работать, но я вообще не использовал маршрутизацию. Я только что сделал плагин со следующим:
public function preDispatch(\Zend_Controller_Request_Abstract $request) {
if (!\Zend_Controller_Front::getInstance()->getDispatcher()->isDispatchable($request)) {
$request->setModuleName($this->_eventRouter["module"]);
$request->setControllerName($this->_eventRouter["controller"]);
$request->setActionName($this->_eventRouter["action"]);
}
}
Хотя это кажется уродливым решением ... Как отметил Тим Фонтан, мои события являются динамическими (я загружаю их из базы данных), поэтому я не могу его жестко запрограммировать. Кроме того, моя текущая реализация не позволяет мне жестко кодировать каждую комбинацию модуль / контроллер / действие.
Я просто хотел бы знать, есть ли способ избежать использования плагина.
РЕДАКТИРОВАТЬ²: Я больше не занимаюсь этим дерьмовым плагином. Я выяснил, что вызвало ошибку маршрутизатора. В моем определении маршрутизации не было допустимого значения по умолчанию для переменной eventName. Мое исправление было:
$router->addRoute(
'eventName',
new Zend_Controller_Router_Route(
'/:eventName',
array(
'module' => 'default',
'controller' => 'event',
'action' => 'detail',
'eventName' => ''
)
)
);
Я по-прежнему не могу создавать маршруты с "конфликтующими" шаблонами, такими как / admin и /: eventName. Если бы только был способ заставить / admin переопределить /: eventName ...