[MANUAL] English:
[zend.git] / documentation / manual / ru / module_specs / Zend_Controller-Basics.xml
blobb469dbce5a04b39ccfe4244b4be74369e3669442
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- Reviewed: no -->
3 <sect1 id="zend.controller.basics">
4     <title>Основы Zend_Controller</title>
6     <para>
7         Система <classname>Zend_Controller</classname> спроектирована быть легковесной,
8         модульной и расширяемой. Ее минимализм допускает гибкость и некоторую
9         свободу в использовании, при этом она достаточно структурирована, чтобы
10         системы, построенные с использованием <classname>Zend_Controller</classname>,
11         использовали некоторые общие соглашения и сходное размещение кода.
12     </para>
14     <para>
15         Следующая диаграмма отображает рабочий процесс системы, далее подробно
16         описывается их взаимодействие:
17     </para>
19     <para>
20         <inlinegraphic width="483" scale="100" align="center" valign="middle"
21             fileref="figures/zend.controller.basics.png" format="PNG" />
22     </para>
24     <para>
25         Рабочий процесс <classname>Zend_Controller</classname> осуществляется несколькими
26         компонентами. Несмотря на то, что для использования этой системы нет
27         необходимости в совершенном понимании внутренней работы всех этих
28         компонент, полезно иметь практическое представление об этом процессе.
29     </para>
31         <itemizedlist>
32             <listitem>
33                 <para>
34                     Фронт-контроллер (<classname>Zend_Controller_Front</classname>)
35                     управляет всем рабочим процессом системы
36                     <classname>Zend_Controller</classname>. Это одна из интерпретаций
37                     паттерна FrontController. <classname>Zend_Controller_Front</classname>
38                     обрабатывает все запросы, полученные сервером, и в конечном
39                     счете отвечает за делегацию запросов контроллерам действий
40                     (<classname>Zend_Controller_Action</classname>).
41                 </para>
42             </listitem>
44             <listitem>
45                 <para>
46                     <classname>Zend_Controller_Request_Abstract</classname> (часто
47                     называется <code>объектом запроса</code>) представляет
48                     переменные запроса и предоставляет методы для установки и
49                     получения имен контроллера, действия и любых параметров
50                     запроса. Кроме того, он отслеживает, было ли обработано
51                     содержащееся в нем действие диспетчером
52                     <classname>Zend_Controller_Dispatcher</classname>.
53                     Расширения абстрактного объекта запроса могут
54                     использоваться для инкапсуляции всех переменных
55                     запроса, позволяя роутерам извлекать информацию
56                     из переменных запроса для того, чтобы устанавливать имена
57                     контроллера и действия.
58                 </para>
60                 <para>
61                     По умолчанию используется
62                     <classname>Zend_Controller_Request_Http</classname>. Он
63                     предоставляет доступ ко всем переменным HTTP-запроса.
64                 </para>
65             </listitem>
67             <listitem>
68                 <para>
69                     <classname>Zend_Controller_Router_Interface</classname>
70                     используется для описания маршрутизаторов.
71                     Маршрутизация — это процесс исследования переменных запроса
72                     для определения того, какой контроллер и какое действие в
73                     этом контроллере должны получить этот запрос. Эти
74                     контроллер, действие и опциональные параметры
75                     устанавливаются в объекте запроса для обработки диспетчером
76                     <classname>Zend_Controller_Dispatcher_Standard</classname>.
77                     Маршрутизация производится только один раз: когда вначале
78                     получен запрос и до того, как первый контроллер примет
79                     управление.
80                 </para>
82                 <para>
83                     Используемый по умолчанию маршрутизатор
84                     <classname>Zend_Controller_Router_Rewrite</classname> принимает
85                     конечную точку URI в том виде, в котором она определена в
86                     <classname>Zend_Controller_Request_Http</classname>, и разлагает ее на
87                     контроллер, действие и параметры, основываясь на пути в URL.
88                     Например, URL
89                     <code>http://localhost/foo/bar/key/value</code>
90                     будет расшифрован следующим образом: контроллер
91                     <code>foo</code>, действие <code>bar</code> и параметр
92                     <code>key</code> со значением <code>value</code>.
93                 </para>
95                 <para>
96                     <classname>Zend_Controller_Router_Rewrite</classname> может также
97                     использоваться для сопоставления с произвольными путями,
98                     за более подробной информацией см. <link
99                     linkend="zend.controller.router">документацию по Rewrite
100                     Router</link>
101                 </para>
102             </listitem>
104             <listitem>
105                 <para>
106                     <classname>Zend_Controller_Dispatcher_Interface</classname>
107                     используется для описания диспетчеров.
108                     Диспетчеризация — это процесс извлечения контроллера и
109                     действия из объекта запроса, нахождения соответствующих
110                     файла/класса контроллера и метода действия в
111                     классе контроллера. Ситуации, когда соответствующие
112                     контроллер или действие не найдены, решаются
113                     определением контроллеров и действий по умолчанию.
114                 </para>
116                 <para>
117                     В действии процесс диспетчеризации состоит из
118                     инстанцирования класса контроллера и вызова метода действия
119                     в этом классе. В отличие от маршрутизации, которая
120                     производится только один раз, диспетчеризация производится
121                     циклически. Если флаг диспетчеризации объекта запроса
122                     сбрасывается, то цикл будет повторяться, при этом вызывается
123                     действие, которое будет установлено на данный момент в
124                     объекте запроса. Если итерация цикла завершится с
125                     установленным флагом диспетчеризации (значение
126                     <constant>TRUE</constant>) в объекте запроса, то процесс
127                     диспетчеризации завершается.
128                 </para>
130                 <para>
131                     По умолчанию используется диспетчер
132                     <classname>Zend_Controller_Dispatcher_Standard</classname>.
133                     Он определяет контроллеры как классы с именами,
134                     завершающимися словом Controller, и в которых все слова
135                     начинаются со сточной буквы (MixedCase), методы действий —
136                     как методы с именами, завершающимися словом Action, и в
137                     которых все слова, кроме первого, начинаются со строчной
138                     буквы (camelCase):
139                     <code>SomeFooController::barAction</code>.
140                     В этом случае на контроллер нужно ссылаться как на
141                     <code>somefoo</code>, а на действие как на
142                     <code>bar</code>.
143                 </para>
145                 <note>
146                     <title>Соглашения по именованию</title>
148                     <para>
149                         Общеизвестно, что в случае ручного набора адресов
150                         удобство и поддержка чувствительности регистра
151                         несовместимы в принципе, поэтому Zend Framework приводит
152                         пути в URL к нижнему регистру. Само собой, это влияет на
153                         то, как вы именуете свои контроллеры и действия... или
154                         ссылаетесь на них в URL.
155                     </para>
157                     <para>
158                         Если вы хотите иметь классы контроллеров или методы
159                         действий с именами, состоящими из нескольких слов,
160                         разделенных в стиле MixedCase или camelCase, то нужно
161                         разделить эти слова в URL с помощью '-' или '.' (можно
162                         указать другой символ-разделитель).
163                     </para>
165                     <para>
166                         Например, если вы собираетесь использовать действие
167                         <code>FooBarController::bazBatAction()</code>, то должны
168                         ссылаться на него в URL как на
169                         <code>/foo-bar/baz-bat</code> или
170                         <code>/foo.bar/baz.bat</code>.
171                     </para>
172                 </note>
173             </listitem>
175             <listitem>
176                 <para>
177                     <classname>Zend_Controller_Action</classname> — базовая
178                     составляющая контроллера действий. Каждый контроллер
179                     является отдельным классом, расширяющим
180                     <classname>Zend_Controller_Action</classname>, и этот класс
181                     должен содержать один или более методов действий.
182                 </para>
183             </listitem>
185             <listitem>
186                 <para>
187                     <classname>Zend_Controller_Response_Abstract</classname>
188                     определяет базовый класс ответа, используемый для
189                     сбора и возвращения ответов из контроллеров действий.
190                     Он собирает как тело ответа, так и заголовки.
191                 </para>
193                 <para>
194                     По умолчанию используется класс
195                     <classname>Zend_Controller_Response_Http</classname>, который
196                     подходит для использования в среде HTTP.
197                 </para>
198             </listitem>
199         </itemizedlist>
201     <para>
202         Рабочий процесс <classname>Zend_Controller</classname> относительно простой.
203         Запрос получается объектом <classname>Zend_Controller_Front</classname>,
204         который в свою очередь вызывает
205         <classname>Zend_Controller_Router_Rewrite</classname> для определения того, какой
206         контроллер (и какое действие в этом контроллере) следует использовать.
207         <classname>Zend_Controller_Router_Rewrite</classname>
208         анализирует URI для установки имени контроллера и имени действия в
209         запросе. Затем <classname>Zend_Controller_Front</classname> входит в цикл
210         диспетчеризации. Он вызывает
211         <classname>Zend_Controller_Dispatcher_Standard</classname>, передавая ему
212         запрос для запуска контроллера и действия, определенных в запросе
213         (или тех, которые используются по умолчанию). После того, как
214         контроллер завершит работу, управление возвращается
215         <classname>Zend_Controller_Front</classname>. Если предыдущий контроллер
216         переустановкой статуса диспетчеризации в запросе
217         указал, что должен быть запущен другой контроллер, то цикл
218         продолжается и выполняется запуск другого контроллера. В противном
219         случае процесс завершается.
220     </para>
221 </sect1>
223 <!--
224 vim:se ts=4 sw=4 et: