期待 Mojolicious 路线中的争论
Expecting arguments in Mojolicious routes
我在 Mojolicious 应用程序中有两条路线如下:
my $route = $r->any('/api')->to('API#');
$route->get('/get_data')->to('#process_forms');
$route->get('/get_data/?file=:file&name=:name')->to('#submit_forms');
如果我转到 /api/get_data,我将被重定向到 process_forms 函数。如果我将其他参数传递给同一路由,我希望应用程序将我带到 submit_forms 函数。例如,url /api/get_data/?file=myfile&name=myname 应该调用 submit_forms 函数,但这里不是这种情况。
在这两种情况下,都会调用 process_forms。
Mojolicious 路由提供了哪些选项来帮助我解决这个问题?
Mojo 的路由器将 URL and HTTP request methods 连接到控制器。 GET 和 POST 参数是 not 在路由中使用的。这是有道理的,因为 URL 通常应该以自身为目标。
你有一个路径 /get_data
你需要将它发送给 一个控制器 。如果你有 GET 参数(在 URL 中传递),你想要从那里听起来你想要做的是转到另一个控制器。你可以这样做,但这通常不是你想要的。
只需在控制器中放置一个条件,
在处理 get 参数时,您通常想要的只是将它们放在控制器 IE 中的一个块中,
my $query = $c->req->query_params
my $file = $query->param('foo');
my $name = $query->param('name');
if ( defined $file && defined $name) {
# we have file and name
}
else {
# or we do not
}
重新发送
但您始终可以(手动)重新分配到不同的控制器
MyApp::Controller::submit_forms($self);
或者,通过 Mojo,
$self->routes->continue("#submit_forms")
最后一个想法,you can also make it that the route doesn't match if the post variables aren't there。但是,我从来不需要这样做。
我在 Mojolicious 应用程序中有两条路线如下:
my $route = $r->any('/api')->to('API#');
$route->get('/get_data')->to('#process_forms');
$route->get('/get_data/?file=:file&name=:name')->to('#submit_forms');
如果我转到 /api/get_data,我将被重定向到 process_forms 函数。如果我将其他参数传递给同一路由,我希望应用程序将我带到 submit_forms 函数。例如,url /api/get_data/?file=myfile&name=myname 应该调用 submit_forms 函数,但这里不是这种情况。 在这两种情况下,都会调用 process_forms。 Mojolicious 路由提供了哪些选项来帮助我解决这个问题?
Mojo 的路由器将 URL and HTTP request methods 连接到控制器。 GET 和 POST 参数是 not 在路由中使用的。这是有道理的,因为 URL 通常应该以自身为目标。
你有一个路径 /get_data
你需要将它发送给 一个控制器 。如果你有 GET 参数(在 URL 中传递),你想要从那里听起来你想要做的是转到另一个控制器。你可以这样做,但这通常不是你想要的。
只需在控制器中放置一个条件,
在处理 get 参数时,您通常想要的只是将它们放在控制器 IE 中的一个块中,
my $query = $c->req->query_params
my $file = $query->param('foo');
my $name = $query->param('name');
if ( defined $file && defined $name) {
# we have file and name
}
else {
# or we do not
}
重新发送
但您始终可以(手动)重新分配到不同的控制器
MyApp::Controller::submit_forms($self);
或者,通过 Mojo,
$self->routes->continue("#submit_forms")
最后一个想法,you can also make it that the route doesn't match if the post variables aren't there。但是,我从来不需要这样做。