私はエンティティMessage
とのManyToOne関係を持つエンティティを持っていますUser
:
class Message
{
...
/**
* @var User $sender
*
* @ORM\ManyToOne(targetEntity="Acme\UserBundle\Entity\User")
* @ORM\JoinColumn(name="sender_id", referencedColumnName="id")
*
**/
private $sender;
...
}
値$sender
がない場合はemail
、フォームに新しいフィールドを作成する必要があるためMessage
、Contoller でエンティティのフォームを作成します。
$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'
));
}
validation.yml
そして、エンティティの検証ルールがいくつかありますUser
。User
別のエンティティのフォーム内のエンティティの検証ルールによって、このフィールドを自動的に検証できますか? やり方がわかりません。
私は今回避策を見つけました: create new 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';
}
}
しかし、それは複雑に見えます。より良い解決策はありますか?