Mojolicious模板渲染(十二)
一、表单验证
Mojolicious::Plugin::DefaultHelpers模块中的helper”validation”,可以对POST或GET方法发来的参数进行验证。默认情况下,所有未知字段都将被忽略,因此在对它们的值执行检查之前,您必须决定哪些字段是必需的,哪些是可选的。如果使用像Mojolicious::Validator:: validation中的“is_valid”等方法,每个检查都会立即执行,因此可以立即使用结果构建更高级的验证逻辑:
use Mojolicious::Lite -signatures;
get '/' => sub ($c) {
# 如果提交了参数,就进行检查
my $v = $c->validation;
return $c->render('index') unless $v->has_data;
# 验证参数 ("pass_again" 依赖于 "pass")
$v->required('user')->size(1, 20)->like(qr/^[a-z0-9]+$/);
$v->required('pass_again')->equal_to('pass')
if $v->optional('pass')->size(7, 500)->is_valid;
# 检查如果验证失败
return $c->render('index') if $v->has_error;
# 返回确认信息
$c->render('thanks');
};
app->start;
#下文中label_for是标签指html中的label标签,=>后引号中的字符串会完整的显示在form中。括号中的文本是验证条件说明。与上文中的验证代码语句一一对应。
__DATA__
@@ index.html.ep
<!DOCTYPE html>
<html>
<head>
<style>
label.field-with-error { color: #dd7e5e }
input.field-with-error { background-color: #fd9e7e }
</style>
</head>
<body>
%= form_for index => begin
%= label_for user => 'Username (required, 1-20 characters, a-z/0-9)'
<br>
%= text_field 'user', id => 'user'
%= submit_button
<br>
%= label_for pass => 'Password (optional, 7-500 characters)'
<br>
%= password_field 'pass', id => 'pass'
<br>
%= label_for pass_again => 'Password again (equal to the value above)'
<br>
%= password_field 'pass_again', id => 'pass_again'
% end
</body>
</html>
@@ thanks.html.ep
<!DOCTYPE html>
<html><body>Thank you <%= validation->param('user') %>.</body></html>
Mojolicious::Plugin::TagHelpers模块中的标签helper生成form表单,会自动的记录之前填写的值。除此之外,它还引用了field-with-error css样式,当验证失败时会自动显现。这是tag helper渲染后的html:
<label class="field-with-error" for="user">
Username (required, only characters e-t)
</label>
<input class="field-with-error" type="text" name="user" value="sri">
有关可用检查的完整列表,请参见Mojolicious::Validator中的“CHECKS”。