comparison Lib/IMPL/DOM/Transform/QueryToDOM.pm @ 264:c9c2ec29793f

*IMPL::DOM::Transform: updated documentation
author sergey
date Wed, 09 Jan 2013 17:55:43 +0400
parents 129e48bb5afb
children b56b1ec33b59
comparison
equal deleted inserted replaced
263:0f59b2de72af 264:c9c2ec29793f
13 }; 13 };
14 14
15 sub CTOR { 15 sub CTOR {
16 my ($this) = @_; 16 my ($this) = @_;
17 17
18 $this->templates->{'CGI'} = \&TransformCGI; 18 $this->templates->{'CGI'} = 'TransformCGI';
19 19
20 $this->delimiter('[.]'); 20 $this->delimiter('[.]');
21 $this->prefix(''); 21 $this->prefix('');
22 } 22 }
23 23
34 sub StoreObject { 34 sub StoreObject {
35 my ($this,$node,$data) = @_; 35 my ($this,$node,$data) = @_;
36 36
37 return $node; 37 return $node;
38 } 38 }
39
40 #TODO: support a.b[0][1].c[1]
39 41
40 sub TransformCGI { 42 sub TransformCGI {
41 my ($this,$query) = @_; 43 my ($this,$query) = @_;
42 44
43 my $data={}; 45 my $data={};
73 75
74 return $this->Transform($data); 76 return $this->Transform($data);
75 } 77 }
76 78
77 1; 79 1;
80
81 __END__
82
83 =pod
84
85 =head1 NAME
86
87 C<IMPL::DOM::Transform::QueryToDOM> - преобразование CGI запроса в DOM документ.
88
89 =head1 SYNOPSIS
90
91 =begin code
92
93 use CGI();
94 use IMPL::require {
95 Schema => 'IMPL::DOM::Schema',
96 Config => 'IMPL::Config',
97 QueryToDOM => 'IMPL::DOM::Transform::QueryToDOM'
98 }
99
100 my $q = CGI->new();
101
102 my $schema = Schema->LoadSchema(Config->AppBase('schemas','person.xml'));
103 my $transorm = QueryToDOM->new('edit', $schema);
104
105 my $form = $transform->Transform($q);
106
107 my @errors;
108
109 push @errors, $transform->buildErrors;
110 push @errors, $schema->Validate($doc);
111
112
113 =end code
114
115 =head1 DESCRIPTION
116
117 Наследует C<IMPL::DOM::Transform::ObjectToDOM>. Добавляет метод
118 C<TransformCGI> который применятеся к объектам типа C<CGI> (и производных).
119
120 Запрос C<CGI> сначала приводится к хешу, затем полученный хеш преобразуется
121 в DOM документ при помощи вызова метода C<Transform>.
122
123 Для этого выбираются параметры запроса, затем, имя каждого параметра
124 рассматривается в виде пути к свойству, создается структура из хешей и массивов
125 в которую по указанному пути кладется значение.
126
127 Если параметр имеет несколько значений, значит свойство является массивом.
128
129 Также изменено поведение некоторых методов преобразования.
130
131 =over
132
133 =item * C<TransformPlain($value)>
134
135 Преобразование для простого значения свойства. Посокльку в запросе передаются
136 строковые значения, а схема документа может предполпгать другие типы, при
137 преобразовании значения параметра из запроса к значению узла используется
138 метод C<< $this->inflateNodeValue($value) >>, также помимо значения
139 C<< $this->currentNode->nodeValue >> задается атрибут
140 C<< $this->currentNode->nodeProperty( rawValue => $value) >>, для того, чтобы
141 была возможность получить оригинальное значение параметра запроса (например,
142 в случае когда его формат был не верным и C<nodeValue> будет C<undef>).
143
144 =item * C<StoreObject($node,$object)>
145
146 Данный метод вызывается если текущий узел (переданный в параметре C<$node>)
147 предполагает простое значение, однако в запросе для него было передано сложное
148 содержимое. Данная реализация просто игнорирует переданный объект C<$object>
149 и возвращает C<$node> без изменений.
150
151 =back
152
153 =head1 MEMBERS
154
155 =head2 C<[get]delimiter>
156
157 REGEX. Разделитель свойств в имени параметра, по-умолчанию C<'[.]'>
158
159 =head2 C<[get]prefix>
160
161 Строка, префикс имен параметров, которые участвуют в формировании документа.
162 По-умолчанию пусто.
163
164 =cut