2
我有實體Message
與多對一關係與實體User
:Symfony2的形式:驗證相關的實體屬性
class Message
{
...
/**
* @var User $sender
*
* @ORM\ManyToOne(targetEntity="Acme\UserBundle\Entity\User")
* @ORM\JoinColumn(name="sender_id", referencedColumnName="id")
*
**/
private $sender;
...
}
如果$sender
沒有email
值我需要爲我的形式創造新的領域,所以我創建表單對位指示Message
實體:
$user = $this->getUser();
$message = new Message();
$message->setSender($user);
$formBuilder = $this->createFormBuilder($message, array(
'cascade_validation' => true
));
$formBuilder->add('body', 'textarea');
if (!$user->getEmail()) {
$formBuilder->add('email', 'email', array(
'property_path' => 'sender.email'
));
}
,我已經對實體User
在validation.yml
一些驗證規則。我可以通過我的驗證規則自動驗證此字段是否爲另一實體形式的User
實體?我不知道該怎麼做。
我找到解決方法現在:創建新的MissingEmailType
:
class MissingEmailType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('email')
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Acme\UserBundle\Entity\User',
'validation_groups' => array(
'MissingEmail'
),
));
}
public function getName()
{
return 'missing_email';
}
}
但它看起來複雜。有更好的解決方案嗎?