Symfony验证 Symfony表单 Symfony文件上传 验证是设计应用程序时最重要的方面。它验证传入的数据。本章详细解释了表单验证。 验证约束 验证程序旨在根据约束验证对象。如果您验证对象,只需将一个或多个约束映射到其类,然后将其传递给验证器服务。默认情况下,在验证对象时,将检查相应类的所有约束条件,以确定它们是否真正通过。Symfony支持以下显着的验证约束。 NotBlank 验证属性不是空白。其语法如下 - namespace AppBundle\Entity; use Symfony\Component\Validator\Constraints as Assert; class Student { /** * @Assert\NotBlank() */ protected $studentName; } 此NotBlank约束确保studentName属性不应为空。 NOTNULL 验证一个值不是严格等于null。其语法如下 - namespace AppBundle\Entity; use Symfony\Component\Validator\Constraints as Assert; class Student { /** * @Assert\NotNull() */ protected $studentName; } 电子邮件 验证值是否是有效的电子邮件地址。其语法如下 - namespace AppBundle\Entity; use Symfony\Component\Validator\Constraints as Assert; class Student { /** * @Assert\Email( * message = "The email '{{ value }}' is not a valid email.", * checkMX = true * ) */ protected $email; } 一片空白 验证一个值完全等于null。其语法如下 - namespace AppBundle\Entity; use Symfony\Component\Validator\Constraints as Assert; class Student { /** * @Assert\IsNull() */ protected $studentName; } 长度 验证给定的字符串长度是否在某个最小值和最大值之间。其语法如下 - namespace AppBundle\Entity; use Symfony\Component\Validator\Constraints as Assert; class Student { /** * @Assert\Length( * min = 5, * max = 25, * minMessage = "Your first name must be at least {{ limit }} characters long", * maxMessage = "Your first name cannot be longer than {{ limit }} characters" * ) */ protected $studentName; } 范围 验证给定的数字是否在某个最小值和最大值之间。其语法如下 - namespace AppBundle\Entity; use Symfony\Component\Validator\Constraints as Assert; class Student { /** * @Assert\Range( * min = 40, * max = 100, * minMessage = "You must be at least {{ limit }} marks”, * maxMessage = "Your maximum {{ limit }} marks” * ) */ protected $marks; } 日期 验证一个值是有效的日期。它遵循有效的YYYY-MM-DD格式。其语法如下 - namespace AppBundle\Entity; use Symfony\Component\Validator\Constraints as Assert; class Student { /** * @Assert\Date() */ protected $joinedAt; } 选择 该约束用于确保给定值是给定的有效选择集合之一。它也可以用来验证项目数组中的每个项目是那些有效的选择之一。其语法如下 - namespace AppBundle\Entity; use Symfony\Component\Validator\Constraints as Assert; class Student { /** * @Assert\Choice(choices = {"male", "female"}, message = "Choose a valid gender.") */ protected $gender; } 用户密码 这验证输入值等于当前认证用户的密码。这在用户可以更改密码的表单中很有用,但需要输入旧密码以确保安全。其语法如下 - namespace AppBundle\Form\Model; use Symfony\Component\Security\Core\Validator\Constraints as SecurityAssert; class ChangePassword { /** * @SecurityAssert\UserPassword( * message = "Wrong value for your current password" * ) */ protected $oldPassword; } 该约束验证旧密码与用户的当前密码匹配。 验证示例 让我们编写一个简单的应用程序示例来了解验证概念。 第1步 - 创建一个验证应用程序。 使用以下命令创建Symfony应用程序 validationsample 。 symfony new validationsample 第2步 -创建命名实体 FormValidation 文件 “FormValidation.php” 下 “的src /的appbundle /实体/” 目录。在文件中添加以下更改。 FormValidation.php <?php namespace AppBundle\Entity; use Symfony\Component\Validator\Constraints as Assert; class FormValidation { /** * @Assert\NotBlank() */ protected $name; /** * @Assert\NotBlank() */ protected $id; protected $age; /** * @Assert\NotBlank() */ protected $address; public $password; /** * @Assert\Email( * message = "The email '{{ value }}' is not a valid email.", * checkMX = true * ) */ protected $email; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } public function getId() { return $this->id; } public function setId($id) { $this->id = $id; } public function getAge() { return $this->age; } public function setAge($age) { $this->age = $age; } public function getAddress() { return $this->address; } public function setAddress($address) { $this->address = $address; } public function getEmail() { return $this->email; } public function setEmail($email) { $this->email = $email; } } 第3步 - 在StudentController中创建一个 validateAction 方法。移动到 “src / AppBundle / Controller”目录 ,创建 “studentController.php” 文件,并在其中添加以下代码。 StudentController.php use AppBundle\Entity\FormValidation; /** * @Route("/student/validate") */ public function validateAction(Request $request) { $validate = new FormValidation(); $form = $this->createFormBuilder($validate) ->add('name', TextType::class) ->add('id', TextType::class) ->add('age', TextType::class) ->add('address', TextType::class) ->add('email', TextType::class) ->add('save', SubmitType::class, array('label' => 'Submit')) ->getForm(); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { $validate = $form->getData(); return new Response('Form is validated.'); } return $this->render('student/validate.html.twig', array( 'form' => $form->createView(), )); } 在这里,我们使用Form类创建了表单,然后处理了表单。如果表单已提交且有效,则会显示表单验证消息。否则,显示默认窗体。 第4步 - 在StudentController中为上面创建的操作创建一个视图。 移至目录 “app / Resources / views / student /” 。创建 “validate.html.twig” 文件并在其中添加以下代码。 {% extends 'base.html.twig' %} {% block stylesheets %} <style> #simpleform { width:600px; border:2px solid grey; padding:14px; } #simpleform label { font-size:14px; float:left; width:300px; text-align:right; display:block; } #simpleform span { font-size:11px; color:grey; width:100px; text-align:right; display:block; } #simpleform input { border:1px solid grey; font-family:verdana; font-size:14px; color:light blue; height:24px; width:250px; margin: 0 0 10px 10px; } #simpleform textarea { border:1px solid grey; font-family:verdana; font-size:14px; color:light blue; height:120px; width:250px; margin: 0 0 20px 10px; } #simpleform select { margin: 0 0 20px 10px; } #simpleform button { clear:both; margin-left:250px; background: grey; color:#FFFFFF; border:solid 1px #666666; font-size:16px; } </style> {% endblock %} {% block body %} <h3>Student form validation:</h3> <div id = "simpleform"> {{ form_start(form) }} {{ form_widget(form) }} {{ form_end(form) }} </div> {% endblock %} 在这里,我们使用表单标签来创建表单。 第5步 - 最后,运行应用程序 http:// localhost:8000 / student / validate 。 结果:初始页面 结果:最终页面 Symfony表单 Symfony文件上传