2015-10-14 3 views
0

Используя the Catalyst framework, можно ли автоматически искать другой каталог для контроллеров и моделей? Вещи в lib/myapp/Controller/* автоматически загружаются, и я хотел бы, чтобы это случилось с вещами в lib2/myapp/Controller/*.Автоматическая загрузка контроллеров в другом каталоге библиотеки в Catalyst

ответ

0

Я не знаю ни одного очевидного способа, которым это можно сделать, не вникая с очень глубокими внутренностями Catalyst. Прежде чем приступать к такому тяжелому волшебству, я бы посоветовал подумать о , почему вы пытаетесь это сделать.

Если контроллеры принадлежат myapp, они должны жить в lib/myapp/Controller. Если у вас есть обобщенный код, который используется несколькими приложениями, который должен жить в lib/shared/ (или что-то в этом роде, и вам может понадобиться use lib "$HOME/lib/shared" в вашей основной программе).

Тогда, когда вам нужно, что общий код в MyApp, вы создаете контроллер заглушки, например:

package MyApp::Controller::Foo; 
use Moose; 
extends 'Shared::Controller::Foo'; 
# or, if you prefer, 
# use base 'Shared::Controller::Foo'; 
1; 

... и MyApp::Controller::Foo будет поддерживать любые методы/действия в Shared::Controller::Foo.

Я понимаю, что существуют ограничения на масштабируемость этого решения, но если вы их нажимаете, я думаю, вам нужно переоценить архитектуру вашего приложения.

+0

Действительно, я сам не уверен, что это хорошая идея, я просто хотел знать, легко ли это сделать ... Идея состоит в том, что я хотел бы иметь сайт с «базовым» набором функций для которые пользователи могут добавить, если захотят, и я хотел бы оставить папки отдельными, чтобы сделать это более очевидным. Я могу сделать это для «корневой» папки, имея представление, которое ищет в «root», а также в «root_user» (скажем). И что-то подобное можно сделать для/lib, если пользователи поместили все в/lib/user_added, но затем один теряет бит в том, что URL-адреса «: Local» будут менее полезными. - Большое спасибо за ответ. – ozarfreo

+0

Вы можете разрешить пользовательские контроллеры в подкаталоге под/Controller. Действия могут быть привязаны так, чтобы URI соответствовали существующим пространствам имен. – RET