Как мне динамически изменить контроллер в Zend Framework? - PullRequest
0 голосов
/ 19 ноября 2009

Я нахожусь на полпути через CMS, где URL является SEO-дружественным именем, основанным на заголовке страницы. Существует необходимость в одном разделе использовать определенный контроллер. Так, например:

test.com / page1 (использует контроллер индекса) test.com/page2 (использует контроллер индекса) test.com/page3 (использует другой контроллер) test.com/page4 (использует контроллер индекса)

Я мог бы добавить маршрут, который говорит, что «page3» будет использовать «другой» контроллер, но пользователи CMS должны иметь возможность изменить имя и SEO URL-адреса, поэтому там, где он в настоящий момент находится «page3», его может быть изменено позже, что нарушит мое правило маршрутизации.

Каков наилучший способ (либо подключить фронтальный контроллер, либо другой) получить запрос и вытащить контроллер, который будет использоваться из БД (sql будет выглядеть как «ВЫБРАТЬ контроллер из меню, ГДЕ seo = 'page3'»), затем установить это как контроллер, прежде чем Zend установит контроллер для использования?

Любая помощь или понимание очень ценится.

1 Ответ

1 голос
/ 19 ноября 2009

Вам нужно будет создать плагин контроллера и установить модуль / контроллер / действие для объекта запроса.

Затем в predispatch () вы можете сделать что-то вроде этого:

public function preDispatch(Zend_Controller_Request_Abstract $request)
{
    $request->setModuleName($this->_getModule());
    $request->setControllerName($this->_getController());
    $request->setActionName($this->_getAction());
}

И затем вы можете создать методы __getModule (), _getController (), _getAction (), которые будут проверять $ _SERVER ['REQUEST_URI'] и вашу БД и устанавливать соответствующий модуль / контроллер / действие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...