Используя the Catalyst framework, можно ли автоматически искать другой каталог для контроллеров и моделей? Вещи в lib/myapp/Controller/*
автоматически загружаются, и я хотел бы, чтобы это случилось с вещами в lib2/myapp/Controller/*
.Автоматическая загрузка контроллеров в другом каталоге библиотеки в Catalyst
ответ
Я не знаю ни одного очевидного способа, которым это можно сделать, не вникая с очень глубокими внутренностями 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
.
Я понимаю, что существуют ограничения на масштабируемость этого решения, но если вы их нажимаете, я думаю, вам нужно переоценить архитектуру вашего приложения.
Действительно, я сам не уверен, что это хорошая идея, я просто хотел знать, легко ли это сделать ... Идея состоит в том, что я хотел бы иметь сайт с «базовым» набором функций для которые пользователи могут добавить, если захотят, и я хотел бы оставить папки отдельными, чтобы сделать это более очевидным. Я могу сделать это для «корневой» папки, имея представление, которое ищет в «root», а также в «root_user» (скажем). И что-то подобное можно сделать для/lib, если пользователи поместили все в/lib/user_added, но затем один теряет бит в том, что URL-адреса «: Local» будут менее полезными. - Большое спасибо за ответ. – ozarfreo
Вы можете разрешить пользовательские контроллеры в подкаталоге под/Controller. Действия могут быть привязаны так, чтобы URI соответствовали существующим пространствам имен. – RET