2

我有以下代码:

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 requeste 上的 y 参数,我使用以下方式连接到上述网页:http://myserver:3000?x=2&y=1

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

我的问题可能是什么?

4

1 回答 1

6

Mojolicious 验证使用fluent interface,因此大多数方法都返回验证对象。对象默认为真,因此您的条件始终为真。

相反,您可以检查

  • ->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;
于 2018-04-16T11:22:21.213 回答