【问题标题】:Symfony2 + Doctrine2: Is it possible to interact with validation annotations within an Entity setter?Symfony2 + Doctrine2:是否可以与实体设置器中的验证注释进行交互?
【发布时间】:2012-11-25 21:32:27
【问题描述】:

我有一个Entity,我使用验证annotations 装饰了它,如下所示:

use Symfony\Component\Validator\Constraints as Assert;

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

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

这可能吗?即:

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

【问题讨论】:

  • 你用的是什么版本?
  • Symfony 2.1.3 - 教义 2
  • 您必须使验证器可作为类属性或setProperty() 的参数访问,我认为这很混乱。也许编写一个在$form->isValid() 上触发错误的自定义 ValidationConstraint 会更有帮助?

标签: validation symfony annotations doctrine entity


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多