gpt4 book ai didi

perl - 催化剂不能转发到私有(private)行动

转载 作者:行者123 更新时间:2023-12-04 23:06:23 27 4
gpt4 key购买 nike

Catalyst我正在尝试转发一个私有(private)行动来做一些工作。这是函数定义:

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 中的私有(private)操作。

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, $c, $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} );
}

关于perl - 催化剂不能转发到私有(private)行动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14866862/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com