我有以下代码:
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 paremter我使用以下链接连接上述网页:http://myserver:3000?x=2&y=1
it prints =>你好1。 即使有$ v-> required('y') - >喜欢(q / [A-Z] /);
这可能是我的问题?
答案 0 :(得分:6)
Mojolicious验证使用a 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;