Zend Framework. Route_Regex.

Продолжаю цикл статей про использование и возможности роутера и роутов. Если вы не читали предыдущих частей, то рекомендую начать с них: часть-1, часть-2, часть-3.

В этой статье поговорим о самом мощном и гибком роуте из тех, что предоставляет нам Zend Framework. Это Zend_Controller_Router_Route_Regex.

Работа с ним может показаться сложнее чем с предыдущими, но все же в крупных проектах он берет на себя большую часть работы. Вся его мощь в использование регулярных выражений regex. Да, в Zend_Controller_Router_Route есть зачатки регулярных выражений, но там они используются более жестко, чем здесь.

Типичный роут выглядит так:

 

Как видно по сравнению с Zend_Controller_Router_Route изменилось только местоположение regex‘а. Но самое интересное дальше.

Если мы захотим использовать такой роут, то как же мы получим имена переменных в контроллере? Из правил построения регулярных выражений известно, что группа взятая в скобки “()” обозначается группой с номером 1 и так далее. Этот закон действует и тут. Поэтому в контроллере мы получим переменные таким способом: $this->_getParam(1) и $this->_getParam(2). Это не очень красиво, но работает. Для большей красоты, а главное удобства, есть третий параметр при создании роута. Он устанавливает соответиствие номеров групп именам этих групп.

 

Теперь можно получать параметры таким же образом как и до этого, по именам…

Есть еще и четвертый параметр. Он действует по принципу действия sprintf(). Дело в том что не все компоненты могут свободно работать с регулярными выражениями и им нужна маска нашей конструкции (например URL View Helper). Поэтому допишем еще одну секцию:

 

Как видите запись аналогична записи в sprintf’е. Она просто указывает где сегменты перемены и что они из себя представляют. В нашем случае это две строки (%s). Если вы не работали с функцией sprintf или надо освежить в памяти ее спецификаторы, то обратитесь к справке.

В принципе это все по поводу Zend_Controller_Router_Route_Regex. С помощью него можно создавать сложные гибкие шаблоны благодаря мощным регулярным выражениям regex.

5 комментариев Zend Framework. Route_Regex.

  1. AlexeyChop

    Доброе время суток! Я работаю журналистом в одном из новых издательств и как раз ныне пишу статью по подобной Вашей тематике! Не могли бы Вы дать разрешение на публикацию Вашего материала в нашем печатном изданииб естественно с указанием ссылки на данную статью! Заранее благодарен!

  2. Jorik

    А подскажите, пожалуйста, как для Zend_Controller_Router_Route_Regex собрать урл ($this->url()), перепробывал много способов, но сыпятся ошибки и урл не генерится (((

  3. MUTOgenMUTOgen

    обычно для сборки урл с помощником url требуется передать что-то вроде:
    $this->url(array(‘action’=>’myaction’,’controller’=>’mycontroller’,’module’=>’mymodule’,..),’name_route’);
    поясню, что в массиве я поставил многоточие не зря. если вам требуется подставить в урл какие-то параметры, согласно маске роута, то пишем их сюда. так не получалось?

  4. Zippp

    ’name_route’ – где он указывается? Если можнона примере последнего листинга.

  5. MUTOgenMUTOgen

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">