在一个项目中,我有一个实体"客户"在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'),
));
}
非常感谢您的帮助!