Perl 在Catalyst的不同库目录中自动加载控制器

Perl 在Catalyst的不同库目录中自动加载控制器,perl,catalyst,Perl,Catalyst,使用,是否可以自动在另一个目录中搜索控制器和模型?lib/myapp/Controller/*中的内容是自动加载的,我希望lib2/myapp/Controller/*中的内容也会自动加载。我不知道有什么明显的方法可以做到这一点,而不会影响Catalyst的深层内部。在开始这种繁重的魔法之前,我建议你好好想想为什么要这么做 如果控制器属于myapp,则它们应该位于lib/myapp/Controller中。如果您有多个应用程序共享的通用代码,那么这些代码应该位于lib/shared/或类似的位置

使用,是否可以自动在另一个目录中搜索控制器和模型?lib/myapp/Controller/*中的内容是自动加载的,我希望lib2/myapp/Controller/*中的内容也会自动加载。

我不知道有什么明显的方法可以做到这一点,而不会影响Catalyst的深层内部。在开始这种繁重的魔法之前,我建议你好好想想为什么要这么做

如果控制器属于myapp,则它们应该位于lib/myapp/Controller中。如果您有多个应用程序共享的通用代码,那么这些代码应该位于lib/shared/或类似的位置,并且您可能还需要在主程序中使用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中的任何方法/操作


我理解该解决方案的可扩展性存在局限性,但如果您遇到了局限性,我认为您需要重新评估应用程序的体系结构。

事实上,我自己也不确定这是否是一个好主意,我只是想知道这样做是否容易。。。我的想法是,我希望有一个网站有一套基本的功能,用户可以添加更多,如果他们想,我想保持文件夹分开,使这更明显。对于根文件夹,我可以使用一个在根目录中搜索的视图,也可以在根目录中搜索。通过让用户将所有内容都添加到/lib/user_中,可以为/lib做类似的事情,但这样做会有一点损失:本地URL将不太有用。-非常感谢您的回答。您可以在/Controller下的子目录中允许用户控制器。可以链接操作,以便URI适合现有的名称空间。