Zend Route Regex и view->url

8 Дек
2011

При написании своего маршрута на основе регулярных выражений (Zend_Controller_Router_Route_Regex), помимо основных параметров необходимо еще указывать «обратный адрес».
По сути обратный адрес, это обычная строка в формате sprintf. Нужен он тогда, когда во View с помощью хелпера url вы хотите создать правильную ссылку.

Допустим у нас есть такой маршрут:

$router->addRoute('entity_page',
            new Zend_Controller_Router_Route_Regex('(\d+)(?:/(.*))?',
                array(
                    'controller' => 'index',
                    'action' => 'show'
                ),
                array(
                    1 => 'id',
                    2 => 'title'
                )
            )
        );

Теперь во view попробуем построить правильную ссылку:

echo '<a href="'.$this->url(array('id' => 1, 'title' => 'Hello world!'), 'entity_page').'">Hello world</a>';

На что получим Exception: Message: Cannot assemble. Reversed route is not specified.
Добавляем обратную ссылку:

$router->addRoute('entity_page',
            new Zend_Controller_Router_Route_Regex('(\d+)(?:/(.*))?',
                array(
                    'controller' => 'index',
                    'action' => 'show'
                ),
                array(
                    1 => 'id',
                    2 => 'title'
                ),
                '%s/%s'
            )
        );

Теперь все работает.

Оставить комментарий или два

Наверх
Rambler's Top100