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

时间:2012-11-08 16:52:21

标签: perl model-view-controller mojolicious mojolicious-lite

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

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

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

1 个答案:

答案 0 :(得分:9)

在Mojolicious中,您可能希望通过帮助传递该对象,而不用从中创建Mojolicious::Controller

在你的主要课程中:

sub startup {
    my $app = shift;

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

在您的控制器中:

sub cool_action {
    my $c = shift;

    # ...
    my $foo = $c->thing->gimmeh_foo('bar');
    # ...
}

但是,如果您想为某些操作准备一些内容(例如数据库),那么under可能会对您有所帮助:

  

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

PS:Mojolicious的这个功能之前被命名为 Bridges 。答案相应更新。