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