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

时间:2015-10-14 16:37:38

标签: perl catalyst

使用the Catalyst framework,是否可以自动搜索控制器和模型的另一个目录? lib2/myapp/Controller/*中的内容会自动加载,我希望$phar->setStub($phar->createDefaultStub("main.php")); 中的内容发生同样的情况。

1 个答案:

答案 0 :(得分: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中的所有方法/操作。

我很欣赏该解决方案的可扩展性存在限制,但如果您遇到这些解决方案,我认为您需要重新评估应用的架构。