Mercurial > pub > Impl
comparison Lib/IMPL/Web/Handler/RestController.pm @ 256:32aceba4ee6d
corrected ViewHandlers to handle cookies and headers.
Dirty hacks to handle binary data
RestController doesn't deal with file extensions anymore.
| author | sergey | 
|---|---|
| date | Wed, 12 Dec 2012 04:29:50 +0400 | 
| parents | 827cf96faa1c | 
| children | 4abda21186cd | 
   comparison
  equal
  deleted
  inserted
  replaced
| 255:827cf96faa1c | 256:32aceba4ee6d | 
|---|---|
| 40 | 40 | 
| 41 @segments = split(/\//, $pathInfo, $this->trailingSlash ? -1 : 0); | 41 @segments = split(/\//, $pathInfo, $this->trailingSlash ? -1 : 0); | 
| 42 | 42 | 
| 43 # remove first segment if it is empty | 43 # remove first segment if it is empty | 
| 44 shift @segments if @segments && length($segments[0]) == 0; | 44 shift @segments if @segments && length($segments[0]) == 0; | 
| 45 | |
| 46 if(@segments) { | |
| 47 my $segment = pop(@segments); | |
| 48 my ($obj,$view) = ($segment =~ m/(.*?)(?:\.(\w+))?$/); | |
| 49 push @segments, { id => $obj, name => $segment, ext => $view }; | |
| 50 } | |
| 51 | |
| 52 } | 45 } | 
| 53 | 46 | 
| 54 return @segments; | 47 return @segments; | 
| 55 } | 48 } | 
| 56 | 49 | 
| 62 | 55 | 
| 63 my @segments = $this->GetResourcePath($action); | 56 my @segments = $this->GetResourcePath($action); | 
| 64 | 57 | 
| 65 my $res = $this->resourceFactory->new( | 58 my $res = $this->resourceFactory->new( | 
| 66 id => 'root', | 59 id => 'root', | 
| 67 name => '', | |
| 68 location => Locator->new(base => $action->application->baseUrl) | 60 location => Locator->new(base => $action->application->baseUrl) | 
| 69 ); | 61 ); | 
| 70 | 62 | 
| 71 while(@segments) { | 63 while(@segments) { | 
| 72 my $info = shift @segments; | 64 my $id = shift @segments; | 
| 73 | 65 | 
| 74 $res = $res->FetchChildResource($info->{id}); | 66 $res = $res->FetchChildResource($id); | 
| 75 } | 67 } | 
| 76 | 68 | 
| 77 $res = $res->InvokeHttpVerb($method,$action); | 69 $res = $res->InvokeHttpVerb($method,$action); | 
| 78 } | 70 } | 
| 79 | 71 | 
| 117 Для определения нужного ресурса контроллер разбивает C<PATH_INFO> на фрагменты | 109 Для определения нужного ресурса контроллер разбивает C<PATH_INFO> на фрагменты | 
| 118 и использует каждый фрагмент для получения дочернего ресурса начиная с корневого. | 110 и использует каждый фрагмент для получения дочернего ресурса начиная с корневого. | 
| 119 Для чего используется метод | 111 Для чего используется метод | 
| 120 C<< IMPL::Web::Application::ResourceInterface->FetchChildResource($childId) >>. | 112 C<< IMPL::Web::Application::ResourceInterface->FetchChildResource($childId) >>. | 
| 121 | 113 | 
| 114 =begin text | |
| 115 | |
| 116 /music/audio.mp3 -> ['music','audio.mp3'] | |
| 117 | |
| 118 =end text | |
| 119 | |
| 122 =head1 MEMEBERS | 120 =head1 MEMEBERS | 
| 123 | 121 | 
| 124 =head2 C<[get]rootResource> | 122 =head2 C<[get]resourceFactory> | 
| 125 | 123 | 
| 126 Корневой ресурс приложения, должен быть всегда и реализовывать интерфес ресурса | 124 Фабрика для создания корневого ресурса приложения, полученный ресурс должен | 
| 127 C<IMPL::Web::Application::ResourceInterface>. | 125 реализовывать интерфейс C<IMPL::Web::Application::ResourceInterface>. | 
| 128 | 126 | 
| 129 =head2 C<[get]trailingSlash> | 127 =head2 C<[get]trailingSlash> | 
| 130 | 128 | 
| 131 Если данная переменная имеет значение C<true>, то слеш в конце пути к ресурсу | 129 Если данная переменная имеет значение C<true>, то слеш в конце пути к ресурсу | 
| 132 будет интерпретироваться, как дочерний ресурс с пустым идентификатором. | 130 будет интерпретироваться, как дочерний ресурс с пустым идентификатором. | 
