Mercurial > pub > Impl
comparison Lib/IMPL/Web/Application/Action.pm @ 67:9f5795a10939
Documentation, minor fixes
author | wizard |
---|---|
date | Fri, 19 Mar 2010 20:06:12 +0300 |
parents | 2840c4c85db8 |
children | b56ebc31bf18 |
comparison
equal
deleted
inserted
replaced
66:f47f93534005 | 67:9f5795a10939 |
---|---|
85 | 85 |
86 __END__ | 86 __END__ |
87 | 87 |
88 =pod | 88 =pod |
89 | 89 |
90 =head1 NAME | |
91 | |
92 C<IMPL::Web::Application::Action> - Обертка вокруг C<CGI> запроса. | |
93 | |
90 =head1 DESCRIPTION | 94 =head1 DESCRIPTION |
91 | 95 |
92 Определяет порядок выполнения запроса. | 96 C<[Infrastructure]> |
93 | 97 |
94 Запрос выполняется последовательным вызовом цепочки обработчиков, при этом обработчики | 98 Определяет порядок выполнения запроса. Запрос выполняется последовательным вызовом |
95 сами вызывают следующие. | 99 цепочки обработчиков, при этом обработчики сами вызывают следующие. |
100 Обработчики выполняются в порядке, обратном их добавлению. | |
96 | 101 |
97 Типичная цепочка может быть такой, в порядке добавления | 102 Типичная цепочка может быть такой, в порядке добавления |
98 | 103 |
99 SecCallToMethod($target,$method) | 104 =begin code |
100 AuthenticateMethod | 105 |
101 TDocumentOut($file) | 106 IMPL::Web::QueryHandler::SecCallToMethod |
107 IMPL::Web::QueryHandler::AuthenticateCookie | |
108 IMPL::Web::QueryHandler::PageFormat | |
109 | |
110 =end code | |
102 | 111 |
103 что приведет к следующей последовательности | 112 что приведет к следующей последовательности |
104 | 113 |
105 Action->Invoke() { | 114 =begin code |
106 TDocumentOut->Invoke($Action,$nextHandler) { | 115 |
107 my $result = $nextHandler() { | 116 # the application creates a new Action object |
108 $AuthenticateMethod($Action,$nextHandler) { | 117 |
109 my $context = $Action->application->security->Authenticate($Action->query,$Action->response); | 118 my $action = $application->actionFactory->new( |
110 return $context->Impersonate($nextHandler) { | 119 action => $application, # the application passes self |
111 $objSecCallToMethod->Invoke($Action,undef) { | 120 query => $query # current CGI query |
121 ); | |
122 | |
123 # forms query handlers stack | |
124 | |
125 $action->ChainHandler($_) foreach qw ( | |
126 IMPL::Web::QueryHandler::SecCallToMethod | |
127 IMPL::Web::QueryHandler::AuthenticateCookie | |
128 IMPL::Web::QueryHandler::PageFormat | |
129 ); | |
130 | |
131 # and finally invokes the action | |
132 | |
133 $action->Invoke() { | |
134 | |
135 # some internals | |
136 | |
137 IMPL::Web::QueryHandler::PageFormat->Invoke($action,$nextHandlerIsAuthHandler) { | |
138 | |
139 #some internals | |
140 | |
141 my $result = $nextHandlerIsAuthHandler() { | |
142 | |
143 # some internals | |
144 | |
145 IMPL::Web::QueryHandler::AuthenticateCookie->Invoke($action,$nextHandlerIsSecCall) { | |
146 | |
147 # some internals | |
148 # do auth and generate security $context | |
149 | |
150 # impersonate $context and call the next handler | |
151 return $context->Impersonate($nextHandlerIsSecCall) { | |
152 | |
153 # some internals | |
154 | |
155 IMPL::Web::QueryHandler::SecCallToMethod->Invoke($action,undef) { | |
156 | |
157 # next handler isn't present as it is the last hanler | |
158 | |
159 # some internals | |
160 # calculate the $method and the $target from CGI request | |
161 | |
112 IMPL::Security->AccessCheck($target,$method); | 162 IMPL::Security->AccessCheck($target,$method); |
113 return $target->$method(); | 163 return $target->$method(); |
164 | |
114 } | 165 } |
166 | |
115 } | 167 } |
168 | |
116 } | 169 } |
117 } | 170 } |
118 $this->format($result,$Action->response->streamBody); | 171 |
172 # some intenals | |
173 # formatted output to $action->response->streamBody | |
119 } | 174 } |
120 } | 175 } |
121 | 176 |
177 =end code | |
178 | |
122 или как альтернатива может быть еще | 179 или как альтернатива может быть еще |
123 | 180 |
124 $objSecCallToMethod($target,$method) | 181 =begin code |
125 $AuthenticateMethod | 182 |
126 $TransfromToSimpleData | 183 IMPL::Web::QueryHandler::SecCallToMethod |
127 $JSONOut | 184 IMPL::Web::QueryHandler::AuthenticateCookie |
185 IMPL::Web::QueryHandler::Filter->new( target => IMPL::Transform::ObjectToJSON->new() , method => 'Transform') | |
186 IMLP::Web::QueryHandler::JSONFormat | |
187 | |
188 | |
189 =end code | |
128 | 190 |
129 В данной цепочке также происходит вызов метода, но его результат потом преобразуется | 191 В данной цепочке также происходит вызов метода, но его результат потом преобразуется |
130 в простые структуры и передается JSON преобразователю. Таким образом модулю логики | 192 в простые структуры и передается JSON преобразователю. Таким образом модулю логики |
131 не требуется знать о выходном формате, всю работу проделают дополнительные фильтры. | 193 не требуется знать о выходном формате, всю работу проделают дополнительные фильтры. |
132 | 194 |
195 =head1 MEMBERS | |
196 | |
197 =head2 PROPERTIES | |
198 | |
199 =over | |
200 | |
201 =item C< [get] application> | |
202 | |
203 Экземпляр приложения создавшего текущий объект | |
204 | |
205 =item C< [get] query > | |
206 | |
207 Экземпляр C<CGI> запроса | |
208 | |
209 =item C< [get] response > | |
210 | |
211 Ответ на C<CGI> заспрос C<IMPL::Web::Application::Response> | |
212 | |
213 =item C< [get] responseFactory > | |
214 | |
215 Фабрика ответов на запрос, используется для создания нового ответа | |
216 либо при конструировании текущего объекта C<IMPL::Web::Application::Action>, | |
217 либо при вызове метода C<ReinitResponse> у текущего объекта. | |
218 | |
219 По умолчанию имеет значение C<IMPL::Web::Application::Response> | |
220 | |
221 =back | |
222 | |
223 =head2 METHODS | |
224 | |
225 =over | |
226 | |
227 =item C< ReinitResponse() > | |
228 | |
229 Отмена старого ответа C<response> и создание вместо него нового. | |
230 | |
231 Данная операция обычно проводится при обработке ошибок, когда | |
232 уже сформированный ответ требуется отменить. Следует заметить, | |
233 что эта операция не возможна, если ответ частично или полностью | |
234 отправлен клиенту. Тогда возникает исключение C<IMPL::InvalidOperationException>. | |
235 | |
236 =item C< ChainHandler($handler) > | |
237 | |
238 Добавляет новый обработчик в цепочку. Выполнение цепочки начинается с конца, | |
239 тоесть последний добавленный будет выполнен первым. | |
240 | |
241 =back | |
242 | |
133 =head1 HANDLERS | 243 =head1 HANDLERS |
134 | 244 |
135 =head2 subroutines | 245 =head2 subroutines |
136 | 246 |
137 =over | 247 =over |
149 | 259 |
150 Получается вызов идентичный следующему C<< $action->MethodName($nextHandler) >>; | 260 Получается вызов идентичный следующему C<< $action->MethodName($nextHandler) >>; |
151 | 261 |
152 =back | 262 =back |
153 | 263 |
154 =head2 C< IMPL::Web::Application::QueryHandler > | 264 =head2 C< IMPL::Web::QueryHandler > |
155 | 265 |
156 Любой объект наследованный от C< IMPL::Web::Application::QueryHandler > может быть | 266 Любой объект наследованный от C< IMPL::Web::QueryHandler > может быть |
157 использован в качестве обработчика запроса | 267 использован в качестве обработчика запроса |
158 | 268 |
159 =cut | 269 =cut |