如何在Mojolicious中触发一些控制器子程序before_render?

时间:2017-07-25 19:16:18

标签: perl mojolicious

我可以挂钩before_render并做下一步:

sub before_render_handler {
    my $c =  shift;

    my $extra =  $c->can( 'some_sub' );
    $extra->( $c )   if $extra;
    return;
}

但是,当呈现没有操作的模板时,$cMojolicious::Controller而不是目标控制器 例如,如果我们有user/show并且App::Conroller::User没有show子例程。

尽管在DOC

  

传递当前控制器对象和渲染参数

我们在这里得到默认控制器而不是当前。

如果我们为没有App::Controller::User::some_sub操作的控制器呈现模板user/show,如何致电show

**
作为解决方法,我们可以为每个这样的模板创建裸操作,但这看起来太难看了。

UPD
即使操作存在,但没有显式$c->render,渲染也在默认控制器的上下文中

1 个答案:

答案 0 :(得分:0)

我在每个控制器中使用了一个catch-all子“视图”,只是将那些非动作URL路由到那里。

my $r = $self->routes
#
# You have to match other routes before come to non-action route.
#
$r->route('/#controller')->to(action => 'view');