Mojolicious参数验证

smi*_*ith 2 perl mojolicious mojolicious-lite

我有以下代码:

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]/);
};
Run Code Online (Sandbox Code Playgroud)

并且想要验证http请求的y paremter我连接到上面的网页使用:http:// myserver:3000?x = 2&y = 1

它打印=>你好1.即使有$ v-> required('y') - >喜欢(q/[AZ] /);

这可能是我的问题?

amo*_*mon 6

Mojolicious验证使用流畅的接口,因此大多数方法返回验证对象.默认情况下,对象是真实的,因此您的条件始终为真.

相反,你可以检查

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

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

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

要么

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