Mojolicious 参数验证

Mojolicious Parameter Validation

我有以下代码:

get '/:foo' => sub {
  my $c   = shift;
  my $v = $c->validation;



   my $foo = $c->param('y');

  $c->render(text => "Hello from $foo.") if  $v->required('y')->like(q/[A-Z]/);
};

并想验证我连接到上述网页的 http 请求上的 y 参数:http://myserver:3000?x=2&y=1

它打印 => Hello from 1。 即使有 $v->required('y')->like(q/[A-Z]/);

我的问题是什么?

Mojolicious 验证使用 a fluent interface,因此大多数方法 return 验证对象。默认情况下对象是真实的,所以你的条件总是真实的。

相反,您可以查看

  • ->is_valid() – 当前主题的验证是否成功,或者
  • ->has_error() – 是否有任何验证错误。

您通过对验证对象调用 ->required('name')->optional('name') 来引入新的验证主题。所以你可以写:

$c->render(text => "Hello from $foo.")
  if $v->required('y')->like(q/[A-Z]/)->is_valid;

$v->required('y')->like(q/[A-Z]/);
$c->render(text => "Hello from $foo.") unless $v->has_error;