如何在Mojolicious的其他控制器中调用动作?

Ha *_* Sh 11 model-view-controller perl mojolicious mojolicious-lite

我有一个使用Mojolicious框架的应用程序.我在数据库中有一个表,其中包含错误响应列表以及与之关联的其他详细信息.我已经创建了相应的Result和Resultset来使用DB表.还有一个控制器通过与Resultset交互来获取有关错误的详细信息.

我的想法是在此控制器中调用一个操作,通过查询数据库获取传递给它的错误的详细信息(由另一个控制器传递),添加有关为导致该资源的资源请求的环境的运行时信息.错误,创建响应并返回到调用它的控制器.

我正在努力应对从一个控制器到另一个控制器的呼叫.我如何在Mojolicious中做到这一点?我可以传递控制器对象($self)来实现这一点,但有没有更好的方法来做到这一点,所以我完全将我的错误处理响应与调用控制器分开?

mem*_*owe 9

在Mojolicious中,您可能希望使用帮助程序传递该对象而不创建Mojolicious::Controller它:

在你的主要课程中:

sub startup {
    my $app = shift;

    # ...
    my $thing = Thing->new(foo => 42);
    $app->helper(thing => sub {$thing});
}
Run Code Online (Sandbox Code Playgroud)

在你的控制器中:

sub cool_action {
    my $c = shift;

    # ...
    my $foo = $c->thing->gimmeh_foo('bar');
    # ...
}
Run Code Online (Sandbox Code Playgroud)

不过,如果你想编写的一些行动的东西(如数据库),也许是对你有帮助:

要与多个嵌套路线共享代码,您可以[...]

PS:Mojolicious的这个特征以前被命名为Bridges.答案相应更新.