Omn*_*hio 22 php forms validation symfony
我是Symfony2世界的新手.当我遇到问题时,我试图在Symfony2中学习验证的基础知识.根据指南,要正确管理一系列验证组,您必须在Entity
类上添加此注释的行:
/**
* @Assert\GroupSequence({"User", "Strict"})
*/
Run Code Online (Sandbox Code Playgroud)
并在任何你想要处理正确规则的地方加上一些注释.在我的情况下,指南中的一个是password
仅在首先编译(并遵守我的规则,如最小长度)然后如果与username
值不同时应该有效的字段.问题是它不适合我!
我的意思是,我有相同的User
类,我使用了相同的形式:
$form = $this->createFormBuilder($user, array('validation_groups' => array('signup','strict')))
->add('name', 'text')
->add('email', 'text')
->add('password', 'password')
->add('signup', 'submit')
->getForm();
Run Code Online (Sandbox Code Playgroud)
这是我的User
班级:
<?php
namespace XXX\SiteBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* User
*
* @ORM\Table(name="users")
* @ORM\Entity
* @Assert\GroupSequence({"User", "signup", "strict"})
*/
class User
{
//..
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=255)
* @Assert\NotBlank(groups={"signup"})
* @Assert\Length(min=3,groups={"signup"})
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="password", type="string", length=255)
* @Assert\NotBlank(groups={"signup"})
* @Assert\Length(min=7,groups={"signup"})
*/
private $password;
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=255)
* @Assert\NotBlank(groups={"signup"})
* @Assert\Email(checkMX=true, groups={"signup"})
*/
private $email;
/**
* @Assert\True(groups={"strict"})
*/
public function isPasswordLegal()
{
return $this->name != $this->password;
}
//..some getter\setter methods
}
Run Code Online (Sandbox Code Playgroud)
当我提交表单而不在字段中放置值时,它会向我显示每个错误(这是正确的),但也会isPasswordLegal()
启动,甚至在其他错误之前启动!
我错过了什么?谢谢你们!
错误在其他错误之前显示的原因是,您将其用作方法验证器,并且 Symfony 将错误消息分配给表单实例而不是表单字段。
编辑:
所有表单都提供允许您定义错误消息显示位置的error_mapping
选项。
在你的情况下,它看起来像这样:
$options = array(
'validation_groups' => array('signup','strict'),
'error_mapping' => array(
'isPasswordLegal' => 'password',
),
);
$form = $this->createFormBuilder($user, $options)
->add('name', 'text')
->add('email', 'text')
->add('password', 'password')
->add('signup', 'submit')
->getForm();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1513 次 |
最近记录: |