覆盖实体设置器

时间:2013-07-26 12:09:15

标签: symfony doctrine-orm doctrine symfony-forms symfony-2.3

当调用实体setFoo()的{​​{1}}方法时,我想完成某种逻辑,比如从数据库中获取对象。我正在考虑创建一个处理这种逻辑的侦听器,但我会优先创建一种实体包装器或管理器,它覆盖Bar方法,并且在调用setFoo()时将透明地执行。

这个想法是以透明的方式覆盖所提到的方法应用程序,例如,在提交表单时,bind()方法也会运行覆盖的setFoo()方法而不是Bar::setFoo()

经过一些研究后,我发现无法将我的对象包装成覆盖Bar :: setFoo()。有谁知道我怎么能听Bar :: setFoo()上的调用?作为prePersist,postLoad,onFlush等事件监听器不是有效的解决方案,因为它们在对象验证后被调用我正在尝试使用以下链接上的公开解决方案,但经过一些测试后我认为他们可以监听方法调用除外除了实体方法之外的所有地方,http://jmsyst.com/bundles/JMSAopBundle#transaction-management

有人知道我怎么能做到这一点?

编辑:最后必须将Form :: Events与EntityManager结合使用。结果并不像预期的那样干净但功能齐全。

1 个答案:

答案 0 :(得分:0)

您是否考虑过实施代理对象?

class BarProxy extends Bar
{
    private $bar;

    public function __construct(Bar $bar)
    {
        $this->bar = $bar;
    }

    // override all Bar methods and delegate to $this->bar->{method}()

    public function setFoo($foo)
    {
        // your logic
    }
}
相关问题