【问题标题】:Why is my perl Catalyst redirect_and_detach replacement plugin method failing?为什么我的 perl Catalyst redirect_and_detach 替换插件方法失败?
【发布时间】:2020-07-12 15:50:22
【问题描述】:

寻求帮助以找出一个 stumping 错误。

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

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。但我不明白为什么堆栈跟踪显示第一个参数的 undef(认为那将是 $c 的类/包)。我验证 $c 已作为第一个参数成功传递,并在 my_redirect_and_detatch() 中工作以提取请求参数。

有人看到这个问题吗?

提前致谢。

【问题讨论】:

    标签: perl plugins catalyst


    【解决方案1】:

    结果是 Catalyst 的 redirect_and_attach(),而 $status 如果未提供则默认为 undef,不喜欢实际的 undef $status 参数。解决方案是避免传递 $status 如果它是 undef。

    【讨论】:

      猜你喜欢
      • 2014-05-24
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 2010-09-25
      • 2017-09-08
      • 1970-01-01
      相关资源
      最近更新 更多