如何在Mojolicious中修改Controller与Model的默认存储路径
Mojolicious按业务命名空间划分目录实现方案
一、控制器命名空间配置
Mojolicious默认会自动在[应用名]::Controller命名空间下搜索控制器,要适配新的目录结构,需要在应用的startup启动方法中修改路由的命名空间搜索规则:
sub startup { my $self = shift; # 清空默认控制器命名空间前缀,路由将直接匹配你写的全限定类名 $self->routes->namespaces([]); # 后续路由就可以使用你需要的写法 my $r = $self->routes; $r->any('/api/test')->to('App::Namespace1::Controller::Controller1#test'); # 如果你希望省略类名中的Controller层级,调整类名和文件路径的对应关系即可 }
注意所有控制器文件的package声明要和实际路径匹配,比如App/Namespace1/Controller/Controller1.pm的首行必须是package App::Namespace1::Controller::Controller1;。
二、Model层适配
Mojolicious核心没有内置Model规范,根据你使用的加载方式调整即可:
- 如果使用
Mojolicious::Plugin::Model这类常用插件,加载时指定搜索命名空间:
$self->plugin('Model' => { namespaces => ['App'], # 可选:关闭默认的Model后缀要求,按需调整 # default_moniker => '', });
- 如果是手动加载Model,直接按Perl常规的模块加载规则引入即可,只要文件路径和
package声明对应就能正常调用。
内容的提问来源于stack exchange,提问作者Ryan Dunphy
相关产品推荐
相关产品推荐

