Symfony2 + Doctrine2:是否可以与实体设置器中的验证注释进行交互?

时间:2012-12-07 17:00:13

标签: validation symfony annotations doctrine entity

我有Entity我使用验证annotations进行装饰,如下所示:

use Symfony\Component\Validator\Constraints as Assert;

class Entity
{
    /**
     * @Assert\MaxLength(100)
     */
    protected $property;
    ...
}

$property的setter中,我想知道在提交表单时验证是否成功。如果验证成功(或不成功),我将在PHP中执行其他操作,这些操作不能通过注释获得。

这可能吗?即:

...
function setProperty($value)
{
    if(annotation_validation_passed_when_form_submitted)
    {
        $value = do_something($value);
    }
    $this->property = $value;
}
...

1 个答案:

答案 0 :(得分:1)

您可以向EventListener添加FormBuilder以收听FormEvents::BIND事件。您可以在自己的类中执行此操作,也可以仅在表单构建器本身中执行此操作。我将展示后者的一个例子,因为它更快。

$builder->addEventListener(FormEvents::BIND, function($event) {
        $data = $event->getData();

        $comment = $data->getComment();
        $comment = $comment . $comment;
        $data->setComment($comment);
});

当然用你自己的逻辑替换逻辑。