[MANUAL] English:
[zend.git] / documentation / manual / ru / module_specs / Zend_Controller-Router-Route-Chain.xml
bloba9209c9dc3a462f1f5f6b2a21e90363ef72d8787
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- Reviewed: no -->
3 <sect3 id="zend.controller.router.routes.chain">
4     <title>Zend_Controller_Router_Route_Chain</title>
6     <para>
7         <classname>Zend_Controller_Router_Route_Chain</classname>
8         является маршрутом, который позволяет объединять несколько маршрутов
9         между собой. Это позволяет, например, объединять маршруты по имени
10         хоста с маршрутами по пути или несколько маршрутов по пути.
11         Объединение может быть произведено программным путем или в
12         конфигурационном файле.
13     </para>
15     <note>
16         <title>Приоритет параметров</title>
17         <para>
18             При объединении маршрутов параметры внешнего маршрута имеют
19             больший приоритет, чем параметры внутреннего маршрута. 
20             Таким образом, если вы определили контроллер одновременно во
21             внутреннем и внешнем маршрутах, то будет выбран контроллер из
22             внешнего маршрута.
23         </para>
24     </note>
25     
26     <para>
27         При объединении маршрутов программным путем есть два способа достижения
28         этого. Первый состоит в создании нового экземпляра класса
29         <classname>Zend_Controller_Router_Route_Chain</classname>
30         и последующем вызове метода <code>chain</code> несколько раз
31         со всеми маршрутами, которые должны быть объединены между собой.
32         Другой состоит в том, чтобы брать первый маршрут, например, маршрут по
33         имени хоста, и вызывать его метод <code>chain</code> с маршрутом,
34         который должен быть добавлен к нему.
35         При этом маршрут по имени хоста не изменяется, но будет
36         возвращен новый экземпляр класса
37         <classname>Zend_Controller_Router_Route_Chain</classname>, который
38         объединяет в себе два маршрута:
39     </para>
41     <programlisting language="php"><![CDATA[
42 // Создаются два маршрута
43 $hostnameRoute = new Zend_Controller_Router_Route_Hostname(...);
44 $pathRoute     = new Zend_Controller_Router_Route(...);
46 // Первый способ - объединение через маршрут-"цепочку
47 $chainedRoute = new Zend_Controller_Router_Route_Chain();
48 $chainedRoute->chain($hostnameRoute)
49              ->chain($pathRoute);
51 // Второй способ - непосредственное объединение
52 $chainedRoute = $hostnameRoute->chain($pathRoute);
53 ]]></programlisting>
55     <para>
56         При объединении маршрутов их разделителем по умолчанию будет
57         косая черта. Но может понадобиться использовать и другие разделители:
58     </para>
60     <programlisting language="php"><![CDATA[
61 // Создаются два маршрута
62 $firstRoute  = new Zend_Controller_Router_Route('foo');
63 $secondRoute = new Zend_Controller_Router_Route('bar');
65 // Объединение с использованием другого разделителя
66 $chainedRoute = $firstRoute->chain($secondRoute, '-');
68 // Результирующий маршрут: "foo-bar"
69 echo $chainedRoute->assemble();
70 ]]></programlisting>
72     <sect4 id="zend.controller.router.routes.chain.config">
73         <title>Объединение маршрутов через Zend_Config</title>
75         <para>
76             Для объединения маршрутов в конфигурационном файле есть
77             дополнительные параметры. Наиболее простой способ состоит в
78             использовании параметра <code>chains</code>.
79             Это просто список маршрутов, которые будут
80             объединены с родительским. Ни родительский, ни дочерний
81             маршруты не будут добавлены в маршрутизатор напрямую, в него будет
82             добавлен только составленный из них маршрут. Имя объединенного
83             маршрута в маршрутизаторе будет состоять из имени родительского
84             маршрута и имени дочернего маршрута, объединенных с использованием
85             тире (-). Простая конфигурация в формате XML может выглядеть
86             следующим образом:
87         </para>
89         <programlisting language="xml"><![CDATA[
90 <routes>
91     <www type="Zend_Controller_Router_Route_Hostname">
92         <route>www.example.com</route>
93         <chains>
94             <language type="Zend_Controller_Router_Route">
95                 <route>:language</route>
96                 <reqs language="[a-z]{2}">
97                 <chains>
98                     <index type="Zend_Controller_Router_Route_Static">
99                         <route></route>
100                         <defaults module="default" controller="index" action="index" />
101                     </index>
102                     <imprint type="Zend_Controller_Router_Route_Static">
103                         <route>imprint</route>
104                         <defaults module="default" controller="index" action="index" />
105                     </imprint>
106                 </chains>
107             </language>
108         </chains>
109     </www>
110     <users type="Zend_Controller_Router_Route_Hostname">
111         <route>users.example.com</route>
112         <chains>
113             <profile type="Zend_Controller_Router_Route">
114                 <route>:username</route>
115                 <defaults module="users" controller="profile" action="index" />
116             </profile>
117         </chains>
118     </users>
119     <misc type="Zend_Controller_Router_Route_Static">
120         <route>misc</route>
121     </misc>
122 </routes>
123 ]]></programlisting>
125         <para>
126             Результатом будет три маршрута: <code>www-language-index</code>,
127             <code>www-language-imprint</code> и <code>users-language-profile</code>,
128             которые будут соответствовать только именам хоста, подходящим под
129             заданные определения, и маршрут <code>misc</code>, который будет
130             соответствовать любым именам хоста.
131         </para>
133         <para>
134             Альтернативный способ создания объединенных маршрутов состоит в
135             применении параметра <code>chain</code>,
136             который может использоваться только с маршрутами типа
137             <classname>Zend_Controller_Router_Route_Chain</classname>,
138             эти маршруты указываются на том же уровне, что и остальные:
139         </para>
141         <programlisting language="xml"><![CDATA[
142 <routes>
143     <www type="Zend_Controller_Router_Route_Chain">
144         <route>www.example.com</route>
145     </www>
146     <language type="Zend_Controller_Router_Route">
147         <route>:language</route>
148         <reqs language="[a-z]{2}">
149     </language>
150     <index type="Zend_Controller_Router_Route_Static">
151         <route></route>
152         <defaults module="default" controller="index" action="index" />
153     </index>
154     <imprint type="Zend_Controller_Router_Route_Static">
155         <route>imprint</route>
156         <defaults module="default" controller="index" action="index" />
157     </imprint>
159     <www-index type="Zend_Controller_Router_Route_Chain">
160         <chain>www, language, index</chain>
161     </www-index>
162     <www-imprint type="Zend_Controller_Router_Route_Chain">
163         <chain>www, language, imprint</chain>
164     </www-imprint>
165 </routes>
166 ]]></programlisting>
168         <para>
169             Вы можете также передавать параметр <code>chain</code> в виде
170             массива вместо перечисления маршрутов через запятую:
171         </para>
173         <programlisting language="xml"><![CDATA[
174 <routes>
175     <www-index type="Zend_Controller_Router_Route_Chain">
176         <chain>www</chain>
177         <chain>language</chain>
178         <chain>index</chain>
179     </www-index>
180     <www-imprint type="Zend_Controller_Router_Route_Chain">
181         <chain>www</chain>
182         <chain>language</chain>
183         <chain>imprint</chain>
184     </www-imprint>
185 </routes>
186 ]]></programlisting>
187     </sect4>
188 </sect3>
189 <!--
190 vim:se ts=4 sw=4 et: