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