【问题标题】:Plugin DSL method 'request' is deprecated. Use '$self->app->request' instead'插件 DSL 方法“请求”已弃用。改用'$self->app->request'
【发布时间】:2018-10-26 10:16:00
【问题描述】:

在 perl 中,我使用的是 Dancer 2 框架,并使用了这个插件

use Dancer2::Plugin::Deferred;
use Dancer2::Plugin::Locale::Wolowitz;

对于如下语句:

my $method = request->method();

my $params = request->params;

我在控制台上收到以下警告:

Plugin DSL method 'request' is deprecated. Use '$self->app->request' instead'.

请给出解决问题的建议,我不确定这两个模块中的哪一个导致了这个问题。

谢谢

【问题讨论】:

  • 我认为您使用的是 Dancer 或 Dancer2 框架,或 Mojolicious 框架,但如果没有看到您的代码,我无法确定。
  • 感谢您的欢迎,我已经编辑了我的问题,希望现在有意义。如果您没有得到它,请告诉我,我可能会修改它并使其更清晰。
  • Dancer2 的哪个版本?请在终端运行perl -MDancer2\ 99,包括反斜杠后的空格。
  • 我无法在 Dancer2 0.206000 和 Dancer2::Plugin::Deferred 0.007017 上重现。你也在用别的东西吗?请再次edit 并附上minimal reproducible example
  • 您需要显示您使用过的代码。运行我的示例。对你起作用吗?然后将该技术应用到您的程序中。如果我的有效而你的无效,那么你做错了什么。如果我看不到它,我无法帮助你。

标签: perl dancer


【解决方案1】:

Dancer2 主要是面向对象的。它总是将$self 传递给您的路由处理程序。警告很清楚。您不应使用该 DSL 关键字,而应通过 $self->app 访问请求。

您需要从路由处理程序的参数列表中获取$self。在同一个包或任何其他包中使用匿名子还是对命名子的引用都没有关系。

use Dancer2;

get '/' => \&main::foo;

sub foo {
  my $self = shift;
  return $self->app->request->params;
}

【讨论】:

  • 谢谢@simbabque get 调用工作正常,但我们在 ajax 调用中遇到错误,我们将此函数调用为:ajax '/_updateTest' => \&main::foo; 错误是:error @2018-10-29 06:48:42> Route exception: Can't call method "app" on an undefined value at
  • 再次@I_G,请提供minimal reproducible example。我不知道所有的事实。现在,如果你不告诉我一切,你就是在浪费我们俩的时间。没有什么比 IT 猜测更糟糕的了。
  • ajax ['post'] => '/test/testCall' => \&main::foo;的情况类似
  • use Dancer2; get '/' => \&main::foo; #working fine # $self object is undef for following type of calls ajax '/_updateTest' => \&main::foo; ajax ['post'] => '/test/testCall' => \&main::foo; sub foo { my $self = shift; return $self->app->request->params; }
  • 我们已经用您提供的代码进行了测试,只是改变了调用方式,我的意思是 ajax 和 post。 @simbabque,您可以通过更新调用方式来测试您提供的上述代码在我端有一个路由文件,我在其中更改了调用方法。
猜你喜欢
  • 2016-04-09
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 2022-08-07
  • 1970-01-01
  • 2016-06-13
相关资源
最近更新 更多