为什么我的perl Catalyst redirect_and_detach替换插件方法失败了



正在寻找解决难辨错误的帮助。

我创建了一个perl Catalyst插件,旨在为Catalyst 5.90115的redirect_and_detach($c->redirect_and _detach(提供一种替换方法。我的替换方法只调用Catalyst的redirect_and_adetach:

package MyApp::Catalyst::Plugin::Logger;
...
sub my_redirect_and_detach {
my ($c, $uri, $status) = @_;
$c->redirect_and_detach($uri, $status);
}

我意识到这并没有增加任何价值,我只是先测试一下这个简单的案例。

然后我替换这个工作呼叫。。。

$c->redirect_and_detach($someuri);

通过调用我的新插件方法。。。

$c->my_redirect_and_detach($someuri);

我得到以下(缩写/模糊(错误:

Parameter #2 (undef) to Catalyst::Plugin::RedirectAndDetach::redirect_and_detach was an 'undef', which is not one of the allowed types: scalar
at /usr/local/share/perl/5.26.1/Catalyst/Plugin/RedirectAndDetach.pm line 18.
Catalyst::Plugin::RedirectAndDetach::redirect_and_detach(undef, "/myuri", undef) called at /var/app/lib/MyApp/Catalyst/Plugin/Logger.pm line 95
MyApp::Catalyst::Plugin::Logger::my_redirect_and_detach(MyApp=HASH(0x5628f93e4e60), "/myuri") called at ...

我理解Catalyst方法规范要求定义参数#2。但我不明白为什么stacktrace在第一个参数中显示undef(认为这是$c的类/包(。我验证了$c作为第一个参数已成功传递,并在my_redirect_and_deatch((内部工作以提取请求参数。

有人看到这个问题了吗?

提前谢谢。

发现Catalyst的redirect_and_attach((,而$status默认为undef(如果未提供(,不喜欢实际的undef$status参数。解决方案是避免通过$状态,如果它是不设防的。

最新更新