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 будет интерпретироваться, как дочерний ресурс с пустым идентификатором. |