模板失败后如何调用 Mojolicious 控制器方法
How to call a Mojolicious controller method after failing on template
我有一个 Mojolicious 问题,我怀疑它有一个简单的解决方案,但我无法浏览它的所有代码。
$r->get(
'/:controller/:action',
sub {
my $c = shift;
$c->render_maybe && return;
# No template. Either call controller->action() or dispatch as POST
}
);
$r->post('/:controller/:action');
如您所见,我有两条使用相同 URL 的路由,一条用于 GET,一条用于 POST。 POST 很简单。它在找到控制器和操作方法后呈现,并且与模板无关。我有 GET 方法在模板存在的地方工作,忽略控制器,通过使用带有 render_maybe() 的回调。我的问题是,如果没有模板,我想继续 运行 控制器的方法。
一种解决方案是简单地识别我的控制器并调用操作。由于我在我的路线中使用占位符,我不能简单地对其进行硬编码。那么,有没有一种获取我的控制器 class 的 Mojolicious 方法,或者是否有获取 class 并调用该方法的实际代码?我在 stash 中同时定义了控制器和动作,所以这真的没什么大不了的。 Mojo 知道如何在内部执行此操作。
另一种选择是将其转换为 POST 方法,然后 运行 照常进行。我不知道最好是想出 URL,还是找到定义的 POST 路由,或者只是将我的 GET 转换为 POST。我不确定如何完成这些。
谢谢。
我不确定这是否是 under() 的预期用例,但它似乎是解决我的问题的一个不错的解决方案。
$r->under( '/:controller/:action', sub { !shift->render_maybe } )->get('/');
$r->post('/:controller/:action');
链接 under()->get() 将创建一个嵌套路由。堆栈中的第一个将从 render_maybe 渲染模板(如果存在),然后停在那里。如果模板不存在,它将转到标准的 get(),它将首先检查控制器操作。这正是我想要的。
我有一个 Mojolicious 问题,我怀疑它有一个简单的解决方案,但我无法浏览它的所有代码。
$r->get(
'/:controller/:action',
sub {
my $c = shift;
$c->render_maybe && return;
# No template. Either call controller->action() or dispatch as POST
}
);
$r->post('/:controller/:action');
如您所见,我有两条使用相同 URL 的路由,一条用于 GET,一条用于 POST。 POST 很简单。它在找到控制器和操作方法后呈现,并且与模板无关。我有 GET 方法在模板存在的地方工作,忽略控制器,通过使用带有 render_maybe() 的回调。我的问题是,如果没有模板,我想继续 运行 控制器的方法。
一种解决方案是简单地识别我的控制器并调用操作。由于我在我的路线中使用占位符,我不能简单地对其进行硬编码。那么,有没有一种获取我的控制器 class 的 Mojolicious 方法,或者是否有获取 class 并调用该方法的实际代码?我在 stash 中同时定义了控制器和动作,所以这真的没什么大不了的。 Mojo 知道如何在内部执行此操作。
另一种选择是将其转换为 POST 方法,然后 运行 照常进行。我不知道最好是想出 URL,还是找到定义的 POST 路由,或者只是将我的 GET 转换为 POST。我不确定如何完成这些。
谢谢。
我不确定这是否是 under() 的预期用例,但它似乎是解决我的问题的一个不错的解决方案。
$r->under( '/:controller/:action', sub { !shift->render_maybe } )->get('/');
$r->post('/:controller/:action');
链接 under()->get() 将创建一个嵌套路由。堆栈中的第一个将从 render_maybe 渲染模板(如果存在),然后停在那里。如果模板不存在,它将转到标准的 get(),它将首先检查控制器操作。这正是我想要的。