annotate Lib/IMPL/Web/Application/ControllerUnit.pm @ 112:0ed8e2541b1c

Form processing mechanism
author wizard
date Tue, 18 May 2010 17:59:31 +0400
parents 6c25ea91c985
children 7b14e0122b79
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
110
c13a215508ca Refactoring,
wizard
parents:
diff changeset
1 package IMPL::Web::Application::ControllerUnit;
112
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
2 use strict;
110
c13a215508ca Refactoring,
wizard
parents:
diff changeset
3 use base qw(IMPL::Object);
c13a215508ca Refactoring,
wizard
parents:
diff changeset
4
c13a215508ca Refactoring,
wizard
parents:
diff changeset
5 use IMPL::Class::Property;
112
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
6 use IMPL::DOM::Transform::PostToDOM;
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
7 use IMPL::DOM::Schema;
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
8
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
9 use constant {
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
10 CONTROLLER_METHODS => 'controller_methods',
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
11 STATE_CORRECT => 'correct',
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
12 STATE_NEW => 'new',
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
13 STATE_INVALID => 'invalid'
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
14 };
110
c13a215508ca Refactoring,
wizard
parents:
diff changeset
15
c13a215508ca Refactoring,
wizard
parents:
diff changeset
16 BEGIN {
c13a215508ca Refactoring,
wizard
parents:
diff changeset
17 public property action => prop_get | owner_set;
c13a215508ca Refactoring,
wizard
parents:
diff changeset
18 public property application => prop_get | owner_set;
c13a215508ca Refactoring,
wizard
parents:
diff changeset
19 public property query => prop_get | owner_set;
111
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
20 public property formData => prop_get | owner_set;
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
21 public property formSchema => prop_get | owner_set;
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
22 public property formErrors => prop_get | owner_set;
110
c13a215508ca Refactoring,
wizard
parents:
diff changeset
23 }
c13a215508ca Refactoring,
wizard
parents:
diff changeset
24
c13a215508ca Refactoring,
wizard
parents:
diff changeset
25 sub CTOR {
112
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
26 my ($this,$action,$args) = @_;
110
c13a215508ca Refactoring,
wizard
parents:
diff changeset
27
c13a215508ca Refactoring,
wizard
parents:
diff changeset
28 $this->action($action);
c13a215508ca Refactoring,
wizard
parents:
diff changeset
29 $this->application($action->application);
c13a215508ca Refactoring,
wizard
parents:
diff changeset
30 $this->query($action->query);
112
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
31
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
32 $this->$_($args->{$_}) foreach qw(formData formSchema formErrors);
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
33 }
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
34
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
35 sub forms {
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
36 my ($self,%forms) = @_;
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
37
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
38 while ( my ($method,$info) = each %forms ) {
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
39 die new IMPL::Exception("A method doesn't exists in the controller",$self,$method) unless $self->can($method);
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
40 if ( not ref $info ) {
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
41 $self->class_data(CONTROLLER_METHODS)->{$method} = {
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
42 wrapper => 'FormWrapper',
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
43 schema => $info
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
44 };
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
45 } elsif (ref $info eq 'HASH') {
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
46 die new IMPL::Exception("A schema must be specified",$self,$method) unless $info->{schema};
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
47
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
48 $self->class_data(CONTROLLER_METHODS)->{$method} = {
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
49 wrapper => 'FormWrapper',
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
50 schema => $info->{schema}
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
51 };
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
52 } else {
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
53 die new IMPL::Exception("Unsupported method information",$self,$method);
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
54 }
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
55 }
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
56 }
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
57
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
58 sub transactions {
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
59
110
c13a215508ca Refactoring,
wizard
parents:
diff changeset
60 }
c13a215508ca Refactoring,
wizard
parents:
diff changeset
61
c13a215508ca Refactoring,
wizard
parents:
diff changeset
62 sub InvokeAction {
c13a215508ca Refactoring,
wizard
parents:
diff changeset
63 my ($self,$method,$action) = @_;
c13a215508ca Refactoring,
wizard
parents:
diff changeset
64
112
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
65 if (my $methodInfo = $self->class_data(CONTROLLER_METHODS)->{$method}) {
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
66 if (my $wrapper = $methodInfo->{wrapper}) {
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
67 return $self->$wrapper($method,$action,$methodInfo);
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
68 } else {
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
69 return $self->TransactionWrapper($method,$action,$methodInfo);
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
70 }
110
c13a215508ca Refactoring,
wizard
parents:
diff changeset
71 } else {
c13a215508ca Refactoring,
wizard
parents:
diff changeset
72 die new IMPL::InvalidOperationException("Invalid method call",$self,$method);
c13a215508ca Refactoring,
wizard
parents:
diff changeset
73 }
111
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
74 }
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
75
112
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
76 sub TransactionWrapper {
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
77 my ($self,$method,$action,$methodInfo) = @_;
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
78
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
79 my $unit = $self->new($action);
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
80 return $unit->$method();
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
81 }
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
82
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
83 sub FormWrapper {
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
84 my ($this,$method,$action,$methodInfo) = @_;
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
85
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
86 my $schema = $this->loadSchema($methodInfo->{schema});
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
87
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
88 my $process = $this->query->param('process') || 0;
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
89
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
90
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
91
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
92 my %result = (
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
93
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
94 );
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
95 }
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
96
111
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
97 1;
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
98
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
99 __END__
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
100
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
101 =pod
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
102
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
103 =head1 NAME
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
104
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
105 C<IMPL::Web::Application::ControllerUnit> - базовый класс для обработчика транзакций в модели контроллера.
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
106
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
107 =head1 DESCRIPTION
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
108
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
109 Классы, наследуемые от данного класса используются для выполнения транзакций, которые приходят
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
110 через контроллер запросов. Как правило один класс представляет собой пакет транзакций, каждая
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
111 из которых является независимой от другой.
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
112
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
113 Перед выполнением транзакции создается экземпляр объекта, в рамках которого будет выполнена транзакция.
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
114 Для этого вызывается метод C<InvokeAction($method,$action)>, который создает/восстанавливает контекст
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
115 транзакции.
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
116
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
117 Транзакции на данный момент делятся на простые и формы.
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
118
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
119 =head2 Простые транзакции
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
120
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
121 Простые транзакции получаю только запрос, без предварительной обработки, и возвращенный результат напрямую
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
122 передается пользователю.
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
123
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
124 =head2 Формы
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
125
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
126 При использовании форм запрос предварительно обрабатывается, для получения DOM документа с данными формы.
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
127 Для постороенния DOM документа используется схема. При этом становятся доступны дополнительные свойства
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
128 C<formData>, C<formSchema>, C<formErrors>.
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
129
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
130 Результат выполнения транзакции не возвращается напрямую пользователю, а включается в общий ответ, который
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
131 выглядит следующим образом
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
132
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
133 =begin code
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
134
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
135 {
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
136 state => '{ new | correct | invalid }',
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
137 result => $transactionResult,
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
138 formData => $formDOM,
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
139 formSchema => $formSchema,
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
140 formErrors => @errors
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
141 }
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
142
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
143 =end code
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
144
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
145 =over
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
146
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
147 =item C<state>
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
148
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
149 Состояние верификации формы.
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
150
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
151 =over
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
152
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
153 =item C<new>
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
154
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
155 Первоначальное содержимое формы, оно может быть некорректным, но это нормально.
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
156 В данном состоянии транзакция обычно не выполняется.
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
157
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
158 =item C<correct>
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
159
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
160 Данные формы корректны, транзакция выполнена, и ее результат доступен через поле C<result>
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
161
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
162 =item C<invalid>
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
163
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
164 Содержимое формы не прошло верификацию, ошибки доступны через поле C<formErrors>. Транзакция
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
165 не выполнялась.
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
166
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
167 =back
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
168
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
169 =item C<result>
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
170
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
171 Результат выполнения транзакции, если конечно таковая выполнялась.
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
172
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
173 =item C<formData>
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
174
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
175 ДОМ документ с данными формами. Документ существует всегда, не зависимо от его корректности,
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
176 может быть использован для построения формы, уже заполненную параметрами.
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
177
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
178 =item C<formSchema>
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
179
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
180 Схема данных формы, может использоваться для построения динамических форм.
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
181
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
182 =item C<formErrors>
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
183
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
184 Ошибки верификации данных, если таковые были
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
185
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
186 =back
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
187
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
188 =head1 MEMBERS
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
189
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
190 =over
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
191
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
192 =item C<[get] application>
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
193
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
194 =item C<[get] query>
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
195
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
196 =item C<[get] response>
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
197
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
198 =item C<[get] formData>
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
199
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
200 =item C<[get] formSchema>
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
201
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
202 =item C<[get] formErrors>
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
203
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
204 =item C<InvokeAction($method,$action)>
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
205
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
206 Конструирует контекст выполнения транзакции, может быть переопределен для конструирования контекста по
112
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
207 своим правилам.
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
208
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
209 =item C<TransactionWrapper($method,$action,$methodInfo)>
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
210
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
211 Обертка для конструирования простых транзакций, может быть переопределен для конструирования контекста по
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
212 своим правилам.
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
213
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
214 =item C<FormWrapper($method,$action,$methodInfo)>
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
215
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
216 Обертка для конструирования форм, может быть переопределен для конструирования контекста по
0ed8e2541b1c Form processing mechanism
wizard
parents: 111
diff changeset
217 своим правилам.
111
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
218
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
219 =back
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
220
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
221 =head1 EXAMPLE
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
222
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
223 =begin code
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
224
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
225 package MyBooksUnit;
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
226 use strict;
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
227 use base qw(IMPL::Web::Application::ControllerUnit);
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
228
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
229 __PACKAGE__->PassThroughArgs;
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
230
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
231 __PACKAGE__->transactions(qw(
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
232 find
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
233 info
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
234 ));
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
235 __PACKAGE__->forms(
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
236 create => 'books.create.xml'
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
237 );
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
238
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
239 sub find {
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
240 my ($this) = @_;
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
241
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
242 return $this->application->dataSource->resultset('Books')->find({author => $this->query->param('author')});
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
243 }
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
244
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
245 sub info {
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
246 my ($this) = @_;
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
247
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
248 return $this->application->dataSource->resultset('Books')->find({id => $this->query->param('id')});
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
249 }
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
250
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
251 sub create {
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
252 my ($this) = @_;
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
253
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
254 my %book = map {
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
255 $_ => $this->formData->selectSingleNode($_)->nodeValue
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
256 } qw(author_id title year ISBN);
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
257
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
258 return $this->application->datasource->resultset('Books')->create(\%book);
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
259 }
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
260
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
261 =end code
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
262
6c25ea91c985 ControllerUnit concept
wizard
parents: 110
diff changeset
263 =cut