在我最后一篇我解释了我们是如何ipl-html
Lib的工作原理以及如何使用它。
在…的帮助下ipl-html
可以添加表单。通常,我们希望在提交表单之前验证表单的数据,并在验证失败时显示消息。为此,我们介绍了ipl-validator
.
的ipl-validator
包含许多有用的验证器,今天我想解释如何轻松地使用它们。
为了演示,我们将创建一个带有用户名和电子邮件地址两个输入字段的表单。
<?php命名空间Icinga\Module\Blogpost;使用ipl \ \ Html表单;使用ipl \验证器\ CallbackValidator;使用ipl \验证器\ StringLengthValidator;class BlogpostForm extends Form {protected $defaultAttributes = ['id' => 'blogpost', 'class' => 'ipl-validator'];受保护的函数assemble() {$this->addElement('input', 'username', [' label' => t(' username'), 'validators' => [' StringLength' => ['min' => 8], 'Callback' => function ($value, $validator) {/** @var CallbackValidator $validator */ if ($this->db->hasUsername($value)) {$validator->addMessage(t(' username已被占用,请使用另一个'));返回错误;}返回true;}]]); $this->addElement('input', 'email', [ 'label' => t('Email'), 'validators' => [ 'EmailAddress', 'Callback' => function ($value, $validator) { /** @var CallbackValidator $validator */ if (! str_ends_with($value, '.de')) { $validator->addMessage(t('Only .de emails are allowed')); return false; } return true; } ] ]); } public function onSuccess() { // runs when form is valid // now you can send data to db or do other stuff } }
看这有多简单。我们已经为两个输入字段创建了一个验证器链:
- 用户名必须至少8个字符长,不应该已经存在于数据库中,以通过验证。
- 电子邮件必须是有效的电子邮件,以@结尾,以。de顶级域名通过验证。
您还可以有条件地删除验证器或添加更多验证器,如下所示:
受保护函数assemble(){…if ($this->db->isPgsql()) {$element = $this->getElement('username');元素- > getValidators()——> clearValidators ();$element->getValidators()->add(new StringLengthValidator(['min' => 4, 'max' => 10]));}}
许多验证器接受附加参数以进行更严格的验证。
对于特殊类型的验证,例如正则表达式匹配,您可以使用CallbackValidator,并在验证失败时显示自定义消息。
if ($this->db->isPgsql()){…$element->getValidators()->add(new CallbackValidator(function($value, $validator) {if (preg_match('/[^A-Za-z0-9]/', $value)) {$validator->addMessage(t('不允许特殊字符'));返回错误;}返回true;}));}
我们经常努力使我们所有的ipl库变得更好。请继续关注新功能和改进。