加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 催化剂不能转向私人行动

发布时间:2020-12-16 06:09:28 所属栏目:大数据 来源:网络整理
导读:在 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
在 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} );
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读