Я новичок в мире Symfony2. Я пытался изучить основы проверки в Symfony2, когда у меня возникла проблема с этим. Согласно руководству , чтобы правильно управлять последовательностью групп проверки, вы должны добавить эту строку аннотации в свой класс Entity
:
/**
* @Assert\GroupSequence({"User", "Strict"})
*/
И добавьте некоторую аннотацию, где бы вы ни хотели обработать правильное правило. В моем случае, а также в одном из руководств находится поле 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();
Здесь мой класс 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
}
Когда я отправляю форму без ввода значений в полях, она показывает мне каждую ошибку (и это правильно), а также ту, что isPasswordLegal()
запускается, даже перед другими!
Что мне не хватает? Спасибо всем!