【问题标题】:Symfony2: How to create event listener thru entity annotations?Symfony2:如何通过实体注释创建事件监听器?
【发布时间】:2013-06-30 21:26:19
【问题描述】:

我想在我的实体上有自定义注释,这些注释将在persist 事件中执行某些操作,但通过注释定义。一个例子:

/**
* @ORM\Entity
* @Searchable("column"="title")
*/
class Product
{

}

@Searchable 注释应该以某种方式触发我的代码,该代码将读取列 title,分隔单词并保存到自己的表中(我真正需要的非常简化的示例)。

我知道我可以使用原则侦听器并将它们注册到 config.yml 但我确实需要通过实体注释来完成此操作,以便searchable bundle 可以通过不同的项目轻松重用。我阅读了大量文档,甚至试图理解 Gedmo 行为捆绑代码,但我失败了。能以一种防白痴的方式告诉我如何做到这一点吗?

我什至读过http://php-and-symfony.matthiasnoback.nl/2011/12/symfony2-doctrine-common-creating-powerful-annotations/,但这有点太复杂了。

【问题讨论】:

    标签: symfony doctrine-orm


    【解决方案1】:

    您提供的链接是您应该如何做的完美示例。 您认为使用定制的手工解决方案会复杂多少?

    不过,您可以尝试:

    【讨论】:

    • 该示例没有解释如何在 postPersist 事件上触发它。 Gedmo/Timestampable 行为可以做到这一点,但代码对我来说有点混乱。
    • 它使用学说订阅者/听众(见我的链接#1)
    • 这个监听器可能是一个可以访问注解阅读器的服务(例如注入到 ctor 中)。
    • 好的,想法是:我用 postPersist 监听器创建了一个包(我已经知道它们)。在该方法中,我应该放置将检查持久化实体注释的代码并对此进行处理?问题是:这将为每个持久化的实体触发。是不是有点慢?我只希望在具有我的注释的实体上触发它。有可能吗?
    • 理论上,如果您使用正确的预配置注释阅读器,注释会被缓存。不,不可能只听某些实体。您必须在运行时进行检查。因此可以缓存的是,是否应该通过在某处缓存注释来处理实体。但正如我所说,它应该已经由注释阅读器完成。
    猜你喜欢
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多