Symfony 验证教程展示了如何在 Symfony 应用中验证数据。 在本教程中,我们使用手动验证,我们不使用教义注释。
Symfony 验证
来自用户的输入必须经过验证。 Symfony 提供了Validator
组件来执行验证任务。 该组件基于 Java 的 Bean 验证规范。
验证器旨在针对约束验证对象。 约束是对条件为真的断言。 Symfony 具有许多内置约束,包括NotBlank
,Email
,Length
和Isbn
。 也可以创建自定义约束。
Symfony 验证示例
在示例中,我们有一个简单的表单,其中包含两个字段:name
和email
。 提交表单后,我们使用 Symfony 的Validator
手动验证字段。 在示例中,我们使用Length
,NotBlank
和Email
约束。
安装组件
我们创建一个新的 Symfony 项目,然后转到项目目录。
我们安装symfony/maker-bundle
和symfony/web-server-bundle
。 这些对于开发模式很有用。 请注意,我们正在使用软件包的别名。
我们安装twig-bundle
和注释。 注释位于sensio/framework-extra-bundle
中。
symfony/validator
软件包包含 Symfony 验证工具。
跨站点请求伪造需要symfony/security-csrf
软件包,symfony/monolog-bundle
用于记录日志,symfony/property-access
用于操纵 PHP 属性。
构建 Symfony 应用
我们创建一个HomeController
。
src/Controller/HomeController.php
这是一个简单的控制器,可将包含 Web 表单的视图发送给用户。
我们创建一个FormController
来响应表单提交。
src/Controller/FormController.php
在FormController
中,我们检查 CSRF 令牌,验证表单输入值,并将响应发送回客户端。
注意:为简单起见,我们将验证代码放入控制器中。 在生产应用中,最好将此类代码放在单独的服务类中。
我们注入了请求对象,验证器对象和记录器对象。
我们检索令牌并使用isCsrfTokenValid()
方法对其进行验证。
我们获取请求输入参数,并将其放入数组中。
我们创建约束的集合。 我们可以为单个值分配多个约束。
我们使用validate()
方法对照约束条件验证输入数据。 该方法返回可能的违规。 Symfony 验证器返回ConstraintViolationList
。 我们使用 Symfony 访问器来处理列表。
我们检查是否有违规行为。
Symfony PropertyAccess 用于在将违规消息发送到模板之前对其进行处理。 ConstraintViolationList
转换为 PHP 数组,其中的键是表单字段,值是错误消息。 稍后使用for
指令在 Twig 中处理该数组。
我们在单独的页面中呈现错误消息。 这通常是使用 Flash 消息完成的。
如果一切正常,我们将发送一条简单消息验证已通过。
templates/home/index.html.twig
该表格包含两个字段:姓名和电子邮件。
它还包含一个隐藏字段,以防止跨站点请求伪造。
templates/form/violations.html.twig
在违规视图中,我们浏览违规并列出它们。
使用for
指令,我们遍历错误消息并显示错误消息。
templates/base.html.twig
这是基本的 Twig 模板。
我们启动开发服务器。 然后找到localhost:8000/home
网址以获取表格。
您可能也对以下相关教程感兴趣: Symfony 简介, Symfony DBAL 教程, Symfony 表单教程, PHP 教程。