さて、私はそれを機能させています。メールの一意性がすべてのユーザーフォームで「検証」されるという問題は、そこでチェックするかどうかに関係なく、検証グループで解決できました。これが私のUser
エンティティの関連部分です。注釈のgroups={"registration"}
一部に注意してください。@UniqueEntity
/**
* VNN\PressboxBundle\Entity\User
*
* @ORM\Table(name="user")
* @ORM\Entity
* @UniqueEntity(fields="email", message="Sorry, this email address is already in use.", groups={"registration"})
* @UniqueEntity(fields="username", message="Sorry, this username is already taken.", groups={"registration"})
*/
class User implements AdvancedUserInterface, \Serializable
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string $email
* @Assert\NotBlank()
* @Assert\Email()
*
* @ORM\Column(name="email", type="string", length=255, unique=true)
*/
private $email;
/**
* @var string $username
* @Assert\NotBlank()
*
* @ORM\Column(name="username", type="string", length=255, unique=true)
*/
private $username;
そして私のフォームクラス(最後の関数に注意してください):
<?php
namespace VNN\PressboxBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
class UserType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('first_name')
->add('last_name')
->add('email')
->add('username')
->add('password', 'password')
->add('athletic_director_email')
->add('school')
->add('active', 'hidden')
->add('transition_key', 'hidden')
;
}
public function getName()
{
return 'vnn_pressboxbundle_usertype';
}
// The following function is what's important here.
// This tells this form to use the "registration" validation group.
public function getDefaultOptions(array $options)
{
return array(
'validation_groups' => array('registration')
);
}
}
そして、私はそれだけだと信じています。他の場所で特別なことをする必要はなかったと思います。