Zend_Controller_Router_Route Zend_Controller_Router_Route - стандартный маршрут фреймворка. Он сочетает в себе легкость использования и гибкость определения маршрутов. Каждый маршрут состоит в основном из карты URL (статических и динамических частей (переменных)), и может быть инициализирован со значениями по умолчанию и требованиями к переменным. Давайте представим себе некое приложение, в котором нужно разместить несколько информационных страниц об авторах. Мы хотим, чтобы адрес http://domain.com/author/martel вел на страницу с информацией об авторе с именем "martel". Маршрут для обеспечения такой функциональности может выглядеть следующим образом: 'profile', 'action' => 'userinfo' ) ); $router->addRoute('user', $route); ]]> Первый параметр конструктора Zend_Controller_Router_Route - определение маршрута, которое будет сопоставляться с URL. Определения маршрутов содержат статические и динамические части, разделенные символом косой черты ('/'). Статические части являются обычным текстом: author. Динамические части, называемые переменными, помечаются знаком двоеточия в начале имени переменной: :username. Использование символов Текущая реализация позволяет использовать любые (за исключением косой черты) символы в идентификаторе переменной, но сильно рекомендуется использовать в них только символы, допустимые для переменных в php. Есть вероятность, что в будущем реализация изменится, и это может вызвать скрытые ошибки в вашем коде. Этот маршрут должен сработать, когда вы вводите http://domain.com/author/martel в своем броузере, в этом случае все его переменные будут добавлены в объект Zend_Controller_Request и будут доступны в вашем контроллере ProfileController. Переменные, возвращаемые в этом примере, могут быть представленые в виде следующего массива пар ключ/значение: 'martel', 'controller' => 'profile', 'action' => 'userinfo' ); ]]> Затем Zend_Controller_Dispatcher_Standard должен вызвать метод userinfoAction() вашего класса ProfileController (используется модуль по умолчанию), основываясь на этих значениях. Вы сможете получать эти переменные через методы Zend_Controller_Action::_getParam() или Zend_Controller_Request::getParam(). getRequest(); $username = $request->getParam('username'); $username = $this->_getParam('username'); } ]]> Определение маршрута может содержать в себе еще один специальный символ (метасимвол), представленный символом '*'. Он используется для сбора параметров, как в маршруте Module, используемом по умолчанию (пары переменная => значение, определенные в URI). Следующий маршрут приближенно воспроизводит поведение маршрута Module: 'default') ); $router->addRoute('default', $route); ]]> Значения переменных по умолчанию Любая переменная в маршруте может иметь значение по умолчанию, для этого используется второй параметр конструктора Zend_Controller_Router_Route. Этот параметр является массивом с ключами, представляющими имена переменных, и со значениями в качестве значений переменных по умолчанию: 2006) ); $router->addRoute('archive', $route); ]]> Маршрут выше будет соответствовать URL-ам http://domain.com/archive/2005 и http://example.com/archive. В последнем случае переменная year будет иметь начальное значение по умолчанию 2006. В этом примере переменная year будет добавлена в объект запроса. Поскольку не была предоставлена информация для маршрутизации (не определены параметры controller и action), то управление будет передано контроллеру и методу действия, используемым по умолчанию (оба определены в Zend_Controller_Dispatcher_Abstract). Для того, чтобы сделать этот пример более полезным, нужно передать действительные контроллер и действие в качестве значений по умолчанию: 2006, 'controller' => 'archive', 'action' => 'show' ) ); $router->addRoute('archive', $route); ]]> В результате будет вызван метод showAction() класса ArchiveController. Требования к переменным Можно передать конструктору Zend_Controller_Router_Route третий параметр, в котором установлены требования к переменным. Они определяются как части регулярных выражений: 2006, 'controller' => 'archive', 'action' => 'show' ), array('year' => '\d+') ); $router->addRoute('archive', $route); ]]> В случае маршрута, определенного таким образом, маршрутизатор будет считать URL соответствующим ему только если переменная year содержит числовые данные - например, http://domain.com/archive/2345. URL вида http://example.com/archive/test не будет соответствовать этому маршруту, вместо этого будет произведен переход к следующему маршруту в цепочке.