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