Mercurial > pub > Impl
comparison Lib/IMPL/Web/Application/Resource.pm @ 375:441e84031c7b
docs
author | cin |
---|---|
date | Fri, 10 Jan 2014 16:33:00 +0400 |
parents | 6608db5dcb81 |
children | 2287c72f303a |
comparison
equal
deleted
inserted
replaced
374:6608db5dcb81 | 375:441e84031c7b |
---|---|
82 | 82 |
83 my $children = $this->children | 83 my $children = $this->children |
84 or die NotFoundException->new( $this->location->url, $childId ); | 84 or die NotFoundException->new( $this->location->url, $childId ); |
85 | 85 |
86 if (ref($children) eq 'HASH') { | 86 if (ref($children) eq 'HASH') { |
87 return $children->{$childId}; | 87 if(my $child = $children->{$childId}) { |
88 return $this->_isInvokable($child) ? $this->_invoke($child, $childId) : $child; | |
89 } else { | |
90 die NotFoundException->new( $this->location->url, $childId ); | |
91 } | |
88 } elsif($this->_isInvokable($children)) { | 92 } elsif($this->_isInvokable($children)) { |
89 return $this->_invoke($children,$childId); | 93 return $this->_invoke($children,$childId); |
90 } else { | 94 } else { |
91 die OpException->new("Invalid resource description", $childId, $children); | 95 die OpException->new("Invalid resource description", $childId, $children); |
92 } | 96 } |
300 | 304 |
301 =end code | 305 =end code |
302 | 306 |
303 =head1 MEMBERS | 307 =head1 MEMBERS |
304 | 308 |
309 =head2 C<[get,set]verbs> | |
310 | |
311 Хеш с C<HTTP> методами. При попытке вызова C<HTTP> метода, которого нет в этом | |
312 хеше приводит к исключению C<IMPL::Web::NotAllowedException>. | |
313 | |
314 =head2 C<[get,set]access> | |
315 | |
316 Метод для проверки прав доступа. Если не задан, то доспуп возможен для всех. | |
317 | |
318 =head2 C<[get,set]children> | |
319 | |
320 Дочерние ресурсы. Дочерние ресурсы могут быть описаны либо в виде хеша, либо | |
321 в виде метода. | |
322 | |
323 =head3 C<HASH> | |
324 | |
325 Данный хещ содержит в себе таблицу идентификаторов дочерних ресурсов и их | |
326 описаний. | |
327 | |
328 Описание каждого ресурса представляет собой либо функцию, либо параметры для | |
329 создания ресурса C<CraeteChildResource>. Если описание в виде функции, то она | |
330 должна возвращать либо объект типа ресурс либо параметры для его создания. | |
331 | |
332 =head3 C<CODE> | |
333 | |
334 Если дочерние ресурсы описаны в виде функции (возможно использовать имя метода | |
335 класса текущего ресурса), то для получения дочернего ресурса будет вызвана | |
336 функция с параметрами C<($this,$childId)>, где C<$this> - текущий ресурс, | |
337 C<$childId> - идентификатор дочернего ресурса, который нужно вернуть. | |
338 | |
339 Данная функция должна возвратить либо объект типа ресурс, либо ссылку на хеш с | |
340 параметрами для создания оного при помощи метода | |
341 C<CreateChildResource($params,$childId)>. | |
342 | |
305 =head2 C<[virtual]Fetch($childId)> | 343 =head2 C<[virtual]Fetch($childId)> |
306 | 344 |
307 Метод для получения дочернего ресурса. | 345 Метод для получения дочернего ресурса. |
308 | 346 |
309 Возвращает параметры для создания дочернего ресурса, либо уже созданный ресурс. | 347 Возвращает параметры для создания дочернего ресурса, либо уже созданный ресурс. |
310 Создание дочернего ресурса происходит при помощи метода C<CreateChildResource()> | 348 Создание дочернего ресурса происходит при помощи метода C<CreateChildResource()> |
311 который добавляет недостающие параметры к возвращенным в данным методом и | 349 который добавляет недостающие параметры к возвращенным в данным методом и |
312 создает новый ресурс | 350 создает новый ресурс |
313 | 351 |
314 =head2 C<> | 352 =head2 C<CreateChildResource($params,$id)> |
353 | |
354 Создает новый дочерний ресурс с указанным идентификатором и параметрами. | |
355 Автоматически заполняет параметры | |
356 | |
357 =over | |
358 | |
359 =item * C<parent> | |
360 | |
361 =item * C<id> | |
362 | |
363 =item * C<request> | |
364 | |
365 =back | |
366 | |
367 Тип создаваемого ресурса C<IMPL::Web::Application::Resource>, либо указывается | |
368 в параметре C<class>. | |
369 | |
370 =head2 C<[virtual]HttpGet()> | |
371 | |
372 Реализует C<HTTP> метод C<GET>. По-умолчанию возвращает модель. | |
373 | |
374 Данный метод нужен для того, чтобы ресурс по-умолчанию поддерживал метод C<GET>, | |
375 что является самым частым случаем, если нужно изменить данное поведение, нужно: | |
376 | |
377 =over | |
378 | |
379 =item * Передать в параметр конструктора C<get> значение undef | |
380 | |
381 =item * Переопределить метод C<HttpGet> | |
382 | |
383 =item * При проверке прав доступа выдать исключение | |
384 | |
385 =back | |
315 | 386 |
316 =cut | 387 =cut |
317 | 388 |