我可以挂钩before_render
并做下一步:
sub before_render_handler {
my $c = shift;
my $extra = $c->can( 'some_sub' );
$extra->( $c ) if $extra;
return;
}
但是,当呈现没有操作的模板时,$c
为Mojolicious::Controller
而不是目标控制器
例如,如果我们有user/show
并且App::Conroller::User
没有show
子例程。
尽管在DOC
传递当前控制器对象和渲染参数
我们在这里得到默认控制器而不是当前。
如果我们为没有App::Controller::User::some_sub
操作的控制器呈现模板user/show
,如何致电show
?
**
作为解决方法,我们可以为每个这样的模板创建裸操作,但这看起来太难看了。
UPD
即使操作存在,但没有显式$c->render
,渲染也在默认控制器的上下文中
答案 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');