IPL:如何使用IPL验证器

通过|2023年6月7日

在我最后一篇我解释了我们是如何ipl-htmlLib的工作原理以及如何使用它。

在…的帮助下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库变得更好。请继续关注新功能和改进。

你可能还喜欢……

2023年米兰伊inga营

是时候传播一些监控的爱了!我们非常高兴地宣布,下一届Icinga夏令营将于2023年10月17日在米兰举行

Icinga Kubernetes Helm Charts

在今年5月参加柏林Icinga之前,我们的合作伙伴NETWAYS的Daniel Bodky和Markus Opolka开发了…

订阅我们的通讯

最新的Icinga新闻、发布、文章和社区主题的月度摘要。欧宝app官网网址