在
Catalyst我试图转向私人行动做一些工作.这是函数定义:
sub get_form :Private :Args(1) { my ($self,$c,$type_id) = @_; #do stuff }
我试着像这样前进:
$c->forward('get_form',[$type_id]);
但它只是给了我这个错误:
Couldn't forward to command "get_form": Invalid action or component.
但是,如果我将操作从:Private更改为:Local,那么它可以正常工作.有谁知道这是为什么以及如何解决它?谢谢!
解决方法
您不需要使用:Args(1)用于Catalyst中的私有操作.
From cpan Catalyst Manual:
您可以通过在匿名数组中添加新参数来将它们传递给转发操作.在被调用的方法(或转发的方法)中,您将获得$c-> req-> args中的参数.
sub hello : Global { my ( $self,$c ) = @_; $c->stash->{message} = 'Hello World!'; $c->forward('check_message',[qw/test1/]); } sub check_message : Private { my ( $self,$first_argument ) = @_; my $also_first_argument = $c->req->args->[0]; # now = 'test1' # do something... }
您也可以使用stash $c-> stash-> {typeid};代替.然后,您可以使用$c-> forward(‘priv_method’);直接调用该方法.
例如:
sub hello : Global { my ( $self,$c ) = @_; $c->stash->{message} = 'Hello World!'; $c->forward('check_message'); # $c is automatically included } sub check_message : Private { my ( $self,$c ) = @_; return unless $c->stash->{message}; $c->forward('show_message'); } sub show_message : Private { my ( $self,$c ) = @_; $c->res->body( $c->stash->{message} ); }