Symfony2表单:验证相关的实体属性

时间:2012-11-16 07:26:51

标签: symfony

我的实体Message与实体User具有ManyToOne关系:

class Message
{
    ...
    /**
     * @var User $sender
     *
     * @ORM\ManyToOne(targetEntity="Acme\UserBundle\Entity\User")
     * @ORM\JoinColumn(name="sender_id", referencedColumnName="id")
     *
     **/
    private $sender;
    ...
    }

如果$sender没有email值,我需要为表单创建新字段,因此我在Contoller中为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'
        ));
    }

我在实体validation.yml的{​​{1}}中有一些验证规则。我可以通过另一个实体形式的User实体的验证规则自动验证此字段吗?我不知道怎么做。

我现在找到了解决方法:创建新的User

MissingEmailType

但看起来很复杂。有没有更好的解决方案?

1 个答案:

答案 0 :(得分:0)

您可以将页面重定向到用户个人资料页面,而不是加载消息表单,并说明用户在添加消息之前需要添加电子邮件。如果您快速重定向或创建弹出窗口,只要用户在添加电子邮件后可以返回原始页面,就可能无法关闭用户。然后验证很简单,因为您只需要验证用户实体。