Mercurial > pub > Impl
comparison Lib/IMPL/Web/Handler/RestController.pm @ 268:4abda21186cd
*refactoring IMPL::Web: added 'application' property to resources
author | cin |
---|---|
date | Mon, 21 Jan 2013 02:08:17 +0400 |
parents | 32aceba4ee6d |
children | 04a093f0a5a6 |
comparison
equal
deleted
inserted
replaced
267:bbc0da7ef90e | 268:4abda21186cd |
---|---|
55 | 55 |
56 my @segments = $this->GetResourcePath($action); | 56 my @segments = $this->GetResourcePath($action); |
57 | 57 |
58 my $res = $this->resourceFactory->new( | 58 my $res = $this->resourceFactory->new( |
59 id => 'root', | 59 id => 'root', |
60 location => Locator->new(base => $action->application->baseUrl) | 60 location => Locator->new(base => $action->application->baseUrl), |
61 application => $action->application | |
61 ); | 62 ); |
62 | 63 |
63 while(@segments) { | 64 while(@segments) { |
64 my $id = shift @segments; | 65 my $id = shift @segments; |
65 | 66 |
87 | 88 |
88 =begin code xml | 89 =begin code xml |
89 | 90 |
90 <handlers type="ARRAY"> | 91 <handlers type="ARRAY"> |
91 <item type="IMPL::Web::Handler::RestController"> | 92 <item type="IMPL::Web::Handler::RestController"> |
92 <rootResource type="My::App::Web::RootResource"/> | 93 <resourceFactory>My::App::Web::RootResource"</resourceFactory> |
93 </item> | 94 </item> |
94 <item type="IMPL::Web::Handler::JSONView" /> | 95 <item type="IMPL::Web::Handler::JSONView" /> |
95 <item type="IMPL::Web::Handler::SecureCookie" /> | 96 <item type="IMPL::Web::Handler::SecureCookie" /> |
96 <item type="IMPL::Web::Handler::ErrorHandler" /> | 97 <item type="IMPL::Web::Handler::ErrorHandler" /> |
97 </handlers> | 98 </handlers> |
109 Для определения нужного ресурса контроллер разбивает C<PATH_INFO> на фрагменты | 110 Для определения нужного ресурса контроллер разбивает C<PATH_INFO> на фрагменты |
110 и использует каждый фрагмент для получения дочернего ресурса начиная с корневого. | 111 и использует каждый фрагмент для получения дочернего ресурса начиная с корневого. |
111 Для чего используется метод | 112 Для чего используется метод |
112 C<< IMPL::Web::Application::ResourceInterface->FetchChildResource($childId) >>. | 113 C<< IMPL::Web::Application::ResourceInterface->FetchChildResource($childId) >>. |
113 | 114 |
115 Дерево ресурсов сущестувет независимо от обрабатываемого запроса, однако оно | |
116 может полностью или частично загружаться в начале обработки запроса и | |
117 освобождаться по окончании обработки запроса. Поэтому при получении дочерних | |
118 ресурсов не участвует C<HTTP> запрос, он адресуется только последнему ресурсу. | |
119 | |
114 =begin text | 120 =begin text |
115 | 121 |
116 /music/audio.mp3 -> ['music','audio.mp3'] | 122 /music/audio.mp3 -> ['music','audio.mp3'] |
117 | 123 |
118 =end text | 124 =end text |
122 =head2 C<[get]resourceFactory> | 128 =head2 C<[get]resourceFactory> |
123 | 129 |
124 Фабрика для создания корневого ресурса приложения, полученный ресурс должен | 130 Фабрика для создания корневого ресурса приложения, полученный ресурс должен |
125 реализовывать интерфейс C<IMPL::Web::Application::ResourceInterface>. | 131 реализовывать интерфейс C<IMPL::Web::Application::ResourceInterface>. |
126 | 132 |
133 Фабрика может сохранять ссылку на корневой ресурс и каждый раз не создавать | |
134 его, а возвращать уже существующий. Это вполне оправдано, если хранение | |
135 дерева ресурсов требует меньше ресурсов, чем его создание и при этом приложение | |
136 остается в памяти между C<HTTP> запросами. | |
137 | |
127 =head2 C<[get]trailingSlash> | 138 =head2 C<[get]trailingSlash> |
128 | 139 |
129 Если данная переменная имеет значение C<true>, то слеш в конце пути к ресурсу | 140 Если данная переменная имеет значение C<true>, то слеш в конце пути к ресурсу |
130 будет интерпретироваться, как дочерний ресурс с пустым идентификатором. | 141 будет интерпретироваться, как дочерний ресурс с пустым идентификатором. |
131 | 142 |