Как указать динамическое значение по умолчанию для ключа в маршрутизаторе, Zend Framework

Этот вопрос связан с этим

Как я могу установить по умолчанию для части категории значение категории в URL-адресе запроса?

$Router=$this->_front->getRouter();
$CategoryRoute = new Zend_Controller_Router_Route('category/:category/:controller/:action/*',
           array(
                 'controller' => 'index',
                 'action'     => 'index',
                 'category'   => 'aaa'
           ));
$Router->addRoute('category', $CategoryRoute);

Другими словами, мне нужно, чтобы значение [aaa] было значением категории в то время, когда я строю этот маршрут. Для [category] всегда будет значение, иначе будет использоваться маршрут по умолчанию.

Пример того, что я имею в виду:
Если я захожу на сайт с URL-адресом http://baseurl/category/mycat/index
Я буду перенаправлен на controller = index, action = index, category = mycat.
Но во всех моих файлах представления, где я использую помощник Zend_View :: url (), ссылки будут указывать на:
http://baseurl/category/aaa/somthing/somthing (Используя точный маршрут сверху)
Хотя мне действительно нужно, чтобы они указывали на:
http://baseurl/category/mycat/somthing/somthing

Это происходит потому, что значение по умолчанию для категории записывается как константа в маршруте, а не берется каким-то образом из текущего URL-адреса.
В настоящее время я решаю эту проблему, извлекая категорию из URL-адреса и сделав ее значением по умолчанию.


person Itay Moav -Malimovka    schedule 27.05.2009    source источник
comment
Не могли бы вы уточнить некоторые URL-адреса и что работает, а что не работает?   -  person David Snabel-Caunt    schedule 28.05.2009


Ответы (2)


В вашем посте есть вопрос? :)

ЕСЛИ Я вас понял - вы настраиваете свою категорию по умолчанию, и она будет использоваться, если вы позвоните

$this->url(array(),'category');

Но когда вы используете

$this->url(array('category'=>'my-category'),'category');

он вернет category / my-category / index / idnex вместо category / aaa / index / index

person Tomáš Fejfar    schedule 27.05.2009
comment
Нет, я всегда буду использовать url (array (), null, true); Используемый маршрутизатор будет определяться URI. Это прекрасно работает. Проблема в том, что помощник url ​​() не берет значение категории из URL-адреса, а ожидает, что я введу его вручную во вспомогательный URL-адрес (array ('category' = ›'somevalue')); Этого я пытаюсь избежать. Я могу избежать этого, введя значение по умолчанию для [category] при построении нового маршрута. Проблема в том, что это статическое значение, где оно должно быть значением в URL. Я временно решаю эту проблему, извлекая значение [category] и устанавливая его по умолчанию. - person Itay Moav -Malimovka; 28.05.2009
comment
Этого не должно происходить. Последний параметр url () переключает сброс маршрута - если он быстрый или опущен, тогда маршрут должен быть заполнен с текущего URL. Попробуйте сбросить использованный маршрут. (например, $ frontContr- ›getRouter () -› ...) - person Tomáš Fejfar; 05.06.2009

Если вы используете

$this->url(array(), 'category'); 

он должен работать.

Но имейте в виду: пока вы придерживаетесь значений по умолчанию, вы всегда будете получать простую ссылку / категорию, но при использовании других параметров она должна возвращать правильно адаптированный URL-адрес на основе текущего URI.

т.е. если URI - / category / aaa / index / index, то $ this-> url (array (), 'category'); вернет / категорию, если URI - / category / xxx / index / index, тогда $ this-> url (array (), 'category'); вернет / category / xxx, если URI - / category / xxx / index / process, тогда $ this-> url (array (), 'category'); вернет / category / xxx / index / process и т. д.

person wimvds    schedule 17.11.2009