# HG changeset patch # User cin # Date 1389357180 -14400 # Node ID 441e84031c7be051f50dd06a16bb8fe5963ed40a # Parent 6608db5dcb8151025f1f442f6822b269cb0145eb docs diff -r 6608db5dcb81 -r 441e84031c7b Lib/IMPL/Web/Application/Resource.pm --- 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 методами. При попытке вызова C метода, которого нет в этом +хеше приводит к исключению C. + +=head2 C<[get,set]access> + +Метод для проверки прав доступа. Если не задан, то доспуп возможен для всех. + +=head2 C<[get,set]children> + +Дочерние ресурсы. Дочерние ресурсы могут быть описаны либо в виде хеша, либо +в виде метода. + +=head3 C + +Данный хещ содержит в себе таблицу идентификаторов дочерних ресурсов и их +описаний. + +Описание каждого ресурса представляет собой либо функцию, либо параметры для +создания ресурса C. Если описание в виде функции, то она +должна возвращать либо объект типа ресурс либо параметры для его создания. + +=head3 C + +Если дочерние ресурсы описаны в виде функции (возможно использовать имя метода +класса текущего ресурса), то для получения дочернего ресурса будет вызвана +функция с параметрами C<($this,$childId)>, где C<$this> - текущий ресурс, +C<$childId> - идентификатор дочернего ресурса, который нужно вернуть. + +Данная функция должна возвратить либо объект типа ресурс, либо ссылку на хеш с +параметрами для создания оного при помощи метода +C. + =head2 C<[virtual]Fetch($childId)> Метод для получения дочернего ресурса. @@ -311,7 +349,40 @@ который добавляет недостающие параметры к возвращенным в данным методом и создает новый ресурс -=head2 C<> +=head2 C + +Создает новый дочерний ресурс с указанным идентификатором и параметрами. +Автоматически заполняет параметры + +=over + +=item * C + +=item * C + +=item * C + +=back + +Тип создаваемого ресурса C, либо указывается +в параметре C. + +=head2 C<[virtual]HttpGet()> + +Реализует C метод C. По-умолчанию возвращает модель. + +Данный метод нужен для того, чтобы ресурс по-умолчанию поддерживал метод C, +что является самым частым случаем, если нужно изменить данное поведение, нужно: + +=over + +=item * Передать в параметр конструктора C значение undef + +=item * Переопределить метод C + +=item * При проверке прав доступа выдать исключение + +=back =cut