在mojolicious中将参数传递给redirect_to并在目标控制器中使用它们

PMa*_*Mat 6 perl mojolicious

我正在将参数传递给redirect_to之类的

$c->redirect_to('named', foo => 'bar');
Run Code Online (Sandbox Code Playgroud)

要么

$c->redirect_to('named, query => {foo=> 'bar'});
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在目标控制器中使用它或检索foo的值.

tem*_*ire 12

$self->redirect_to('named', foo => 'bar'),如果没有前面的斜杠,则使用命名路由,并将参数放入路径占位符.

默认情况下,您在应用程序中定义的每个路径都会分配一个路径名称,或者您可以手动分配它们.(您还可以获取已分配路线的列表./myapp routes)

在精简版应用中:

action # route name

get '/named' => sub { ... }; # named
get '/named/:foo' => sub { ... }; # namedfoo
get '/named/:foo' => sub { ... } => 'something-else'; # something-else

以下重定向到get '/named/:foo'操作:

$self->redirect_to('namedfoo', foo => 'bar') 
Run Code Online (Sandbox Code Playgroud)

这实际上与:

$self->redirect_to('/named/bar');
Run Code Online (Sandbox Code Playgroud)

您可以使用 - > param访问操作中的占位符值:

get '/named/:foo' => sub {
  my $self = shift;
  $self->render_text($self->param('foo'));
};
Run Code Online (Sandbox Code Playgroud)

其中呈现以下HTML:

bar


您可能还想查看:http: //mojocasts.com/e2#Generic%20Placeholders


Eug*_*kov 5

非常详细的解释如何传递和获取param

$self 是一个有趣的控制器。在每种情况下,我们都调用 $obj->param 来获取名称列表,调用 $obj->param("arg") 来获取值(或值列表):

$self->param             -- params from route, post and get
$self->req->param        -- params from post and get
$self->req->query_params -- params from get
$self->req->body_params  -- params from post
Run Code Online (Sandbox Code Playgroud)