Mercurial > pub > Impl
diff Lib/IMPL/Web/Application/Resource.pm @ 375:441e84031c7b
docs
author | cin |
---|---|
date | Fri, 10 Jan 2014 16:33:00 +0400 |
parents | 6608db5dcb81 |
children | 2287c72f303a |
line wrap: on
line diff
--- a/Lib/IMPL/Web/Application/Resource.pm Thu Jan 09 19:40:33 2014 +0400 +++ b/Lib/IMPL/Web/Application/Resource.pm Fri Jan 10 16:33:00 2014 +0400 @@ -84,7 +84,11 @@ or die NotFoundException->new( $this->location->url, $childId ); if (ref($children) eq 'HASH') { - return $children->{$childId}; + if(my $child = $children->{$childId}) { + return $this->_isInvokable($child) ? $this->_invoke($child, $childId) : $child; + } else { + die NotFoundException->new( $this->location->url, $childId ); + } } elsif($this->_isInvokable($children)) { return $this->_invoke($children,$childId); } else { @@ -302,6 +306,40 @@ =head1 MEMBERS +=head2 C<[get,set]verbs> + +Хеш с C<HTTP> методами. При попытке вызова C<HTTP> метода, которого нет в этом +хеше приводит к исключению C<IMPL::Web::NotAllowedException>. + +=head2 C<[get,set]access> + +Метод для проверки прав доступа. Если не задан, то доспуп возможен для всех. + +=head2 C<[get,set]children> + +Дочерние ресурсы. Дочерние ресурсы могут быть описаны либо в виде хеша, либо +в виде метода. + +=head3 C<HASH> + +Данный хещ содержит в себе таблицу идентификаторов дочерних ресурсов и их +описаний. + +Описание каждого ресурса представляет собой либо функцию, либо параметры для +создания ресурса C<CraeteChildResource>. Если описание в виде функции, то она +должна возвращать либо объект типа ресурс либо параметры для его создания. + +=head3 C<CODE> + +Если дочерние ресурсы описаны в виде функции (возможно использовать имя метода +класса текущего ресурса), то для получения дочернего ресурса будет вызвана +функция с параметрами C<($this,$childId)>, где C<$this> - текущий ресурс, +C<$childId> - идентификатор дочернего ресурса, который нужно вернуть. + +Данная функция должна возвратить либо объект типа ресурс, либо ссылку на хеш с +параметрами для создания оного при помощи метода +C<CreateChildResource($params,$childId)>. + =head2 C<[virtual]Fetch($childId)> Метод для получения дочернего ресурса. @@ -311,7 +349,40 @@ который добавляет недостающие параметры к возвращенным в данным методом и создает новый ресурс -=head2 C<> +=head2 C<CreateChildResource($params,$id)> + +Создает новый дочерний ресурс с указанным идентификатором и параметрами. +Автоматически заполняет параметры + +=over + +=item * C<parent> + +=item * C<id> + +=item * C<request> + +=back + +Тип создаваемого ресурса C<IMPL::Web::Application::Resource>, либо указывается +в параметре C<class>. + +=head2 C<[virtual]HttpGet()> + +Реализует C<HTTP> метод C<GET>. По-умолчанию возвращает модель. + +Данный метод нужен для того, чтобы ресурс по-умолчанию поддерживал метод C<GET>, +что является самым частым случаем, если нужно изменить данное поведение, нужно: + +=over + +=item * Передать в параметр конструктора C<get> значение undef + +=item * Переопределить метод C<HttpGet> + +=item * При проверке прав доступа выдать исключение + +=back =cut