Помощник Zend по маршрутизации/URL. Отображать глобальный параметр первым в URL

Было любопытно, знает ли кто-нибудь, как лучше всего реализовать следующее: у меня есть параметр в моем приложении zend framework 1.12, который эффективно контролирует «объем» вещей и представляет собой поле в каждой таблице в моей БД для представления области действия строки . Это простая целочисленная переменная, которую можно рассматривать как «идентификатор здания», поэтому она контролирует, с каким «зданием» мы работаем.

В плагине у меня есть:

Zend_Controller_Front::getInstance()->getRouter()->setGlobalParam('building', DYNAMIC_INT);

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

site.com/admin/controller/action/param1/xyz/param2/xyz/building/2

стать

site.com/admin/controller/action/building/2/param1/xyz/param2/xyz ?

Открыт для любых идей. Если вы хотите, чтобы я перегрузил помощника просмотра URL-адресов, можете ли вы предоставить пример кода, потому что у меня возникли проблемы с настройкой этого класса.

Спасибо вам всем!


person sudoyum    schedule 25.02.2013    source источник


Ответы (1)


Для этого можно использовать пользовательский маршрут. Настройте маршрут где-нибудь в вашем загрузочном файле:

$route = new Zend_Controller_Router_Route(
    ':controller/:action/building/:building/*'
);
$router = Zend_Controller_Front::getInstance()->getRouter();
$router->addRoute('building', $route);

И затем, предполагая, что в какой-то момент до использования помощника просмотра URL-адреса было вызвано следующее...

Zend_Controller_Front::getInstance()->getRouter()->setGlobalParam('building', DYNAMIC_INT);

... вы можете указать маршрут в качестве второго аргумента помощника:

echo $this->url(array(
    'controller' => 'admin',
    'action' => 'controller',
    'param1' => 'xyz',
    'param2' => 'xyz',
), 'building');

// /admin/controller/building/1/param1/xyz/param2/xyz
person Divey    schedule 26.02.2013
comment
прекрасно работает. Спасибо за подсказку... Теперь мне ясно, что нужно сделать - person sudoyum; 27.02.2013