Zend_Controller_Router_Route_Chain Zend_Controller_Router_Route_Chain является маршрутом, который позволяет объединять несколько маршрутов между собой. Это позволяет, например, объединять маршруты по имени хоста с маршрутами по пути или несколько маршрутов по пути. Объединение может быть произведено программным путем или в конфигурационном файле. Приоритет параметров При объединении маршрутов параметры внешнего маршрута имеют больший приоритет, чем параметры внутреннего маршрута. Таким образом, если вы определили контроллер одновременно во внутреннем и внешнем маршрутах, то будет выбран контроллер из внешнего маршрута. При объединении маршрутов программным путем есть два способа достижения этого. Первый состоит в создании нового экземпляра класса Zend_Controller_Router_Route_Chain и последующем вызове метода chain несколько раз со всеми маршрутами, которые должны быть объединены между собой. Другой состоит в том, чтобы брать первый маршрут, например, маршрут по имени хоста, и вызывать его метод chain с маршрутом, который должен быть добавлен к нему. При этом маршрут по имени хоста не изменяется, но будет возвращен новый экземпляр класса Zend_Controller_Router_Route_Chain, который объединяет в себе два маршрута: chain($hostnameRoute) ->chain($pathRoute); // Второй способ - непосредственное объединение $chainedRoute = $hostnameRoute->chain($pathRoute); ]]> При объединении маршрутов их разделителем по умолчанию будет косая черта. Но может понадобиться использовать и другие разделители: chain($secondRoute, '-'); // Результирующий маршрут: "foo-bar" echo $chainedRoute->assemble(); ]]> Объединение маршрутов через Zend_Config Для объединения маршрутов в конфигурационном файле есть дополнительные параметры. Наиболее простой способ состоит в использовании параметра chains. Это просто список маршрутов, которые будут объединены с родительским. Ни родительский, ни дочерний маршруты не будут добавлены в маршрутизатор напрямую, в него будет добавлен только составленный из них маршрут. Имя объединенного маршрута в маршрутизаторе будет состоять из имени родительского маршрута и имени дочернего маршрута, объединенных с использованием тире (-). Простая конфигурация в формате XML может выглядеть следующим образом: www.example.com :language imprint users.example.com :username misc ]]> Результатом будет три маршрута: www-language-index, www-language-imprint и users-language-profile, которые будут соответствовать только именам хоста, подходящим под заданные определения, и маршрут misc, который будет соответствовать любым именам хоста. Альтернативный способ создания объединенных маршрутов состоит в применении параметра chain, который может использоваться только с маршрутами типа Zend_Controller_Router_Route_Chain, эти маршруты указываются на том же уровне, что и остальные: www.example.com :language imprint www, language, index www, language, imprint ]]> Вы можете также передавать параметр chain в виде массива вместо перечисления маршрутов через запятую: www language index www language imprint ]]>