Symfony2 - 以嵌入形式执行独特验证

时间:2014-10-23 13:23:51

标签: php forms validation symfony doctrine

在一个项目中,我有一个实体"客户"在ManyToOne关系中链接到实体" company"。当客户注册时,他必须填写一个表格,其中包含"客户"和#34;公司"的名称;因此,我将CustomerType嵌入到CustomerType表单中。

问题在于验证:每家公司的名称应该是唯一的,因此我添加了#34; ' cascade_validation' =>真"在CustomerType中,在实体文件中为unique = true,在公司名称上验证@UniqueEntity。该原则很好地看出了这个错误,但UniqueEntity验证不能正常工作,用户被重定向到500错误页面。

我尝试了很多事情但没有任何成功,任何人都知道如何解决这个问题?

以下是我的文件:

在客户实体中:

/**
 * @ORM\ManyToOne(targetEntity="Site\UserBundle\Entity\Company", inversedBy="customers", cascade="persist")
 * @ORM\ JoinColumn(nullable=false)
 */
private $company;

在公司实体

/**
 * Company
 *
 * @ORM\Table()
 * @ORM\Entity
 * @UniqueEntity(fields={"name"}, groups={"nameCompany"})
 */
class Company
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @ORM\OneToMany(targetEntity="Site\UserBundle\Entity\Customer", mappedBy="company")
 */
private $customers;

/**
 * @var string
 *
 * @ORM\Column(name="name", type="string", length=255, unique=true)
 */
private $name;

在客户表格中

public function buildForm (FormBuilderInterface $builder, array $options)
{
    $builder->add('company', new CompanyType(), array('validation_groups' => array('nameCompany')));
}

/**
 *
 * @param OptionsResolverInterface $resolver            
 */
public function setDefaultOptions (OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(
            array(
                    'data_class' => 'Site\UserBundle\Entity\Customer',
                    'cascade_validation' => true,
            ));
}

在公司表格中:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('name', null,          
            array(
                    'label' => 'entity.customer.company',
                    'translation_domain' => 'SiteUserBundle'
            ));
}

/**
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'Site\UserBundle\Entity\Company',
        'validation_groups' => array('nameCompany'),
    ));
}

非常感谢您的帮助!

0 个答案:

没有答案