Symfony2/2条令:Sluggable扩展:在onFlush或postapdate事件期间访问slug值

Symfony2/2条令:Sluggable扩展:在onFlush或postapdate事件期间访问slug值,symfony,doctrine-orm,stofdoctrineextensions,Symfony,Doctrine Orm,Stofdoctrineextensions,我有一个与ImageRestaurant实体有一对一关系的餐厅实体 我可以使用单个表单编辑这两个实体(ImageRestaurantType嵌入在RestaurantType中) 餐厅实体有一个slug,该slug是通过和使用Gedmo\Sluggable注释生成的 每次更新餐厅实体并重新生成slug属性时,我都尝试使用slug属性(例如slug.jpg)重命名链接到ImageRestaurant实体的文件。我还想更改ImageRestaurant实体的name属性 我有两个选择使用条令事件:

我有一个与ImageRestaurant实体有一对一关系的餐厅实体

我可以使用单个表单编辑这两个实体(ImageRestaurantType嵌入在RestaurantType中)

餐厅实体有一个slug,该slug是通过和使用Gedmo\Sluggable注释生成的

每次更新餐厅实体并重新生成slug属性时,我都尝试使用slug属性(例如slug.jpg)重命名链接到ImageRestaurant实体的文件。我还想更改ImageRestaurant实体的name属性

我有两个选择使用条令事件:

  • onFlush事件:
  • 我可以访问计划更新的实体(餐厅),但此时无法访问更新的slug。因此,我无法更新文件和ImageRestaurant实体

  • 假设更新事件:
  • 我可以访问更新的slug,但如本事件中所述,此事件与数据库中的持久性无关:

    这三个post事件在EntityManager#flush()内部调用。此处的更改与数据库中的持久性无关,但您可以使用这些事件来更改非持久性项,如未映射的字段、日志记录,甚至是未直接映射的关联类

    对于这个事件,由于我可以访问实体ID,我想我可以从数据库中获取实体餐厅(frehsly更新的一个)和ImageRestaurant,然后继续文件和ImageRestaurant更新


    关于如何实现这一点有什么想法吗?

    解决方案非常简单。slug是为doctrine事件onFlush生成的。我的侦听器(在我的情况下是订阅者)需要在之后执行才能访问重新生成的slug属性

    以下是我如何注册我的订阅者(查看Stof评论):

    fbn_guide.doctrine_listener:
        class : FBN\GuideBundle\EventListener\DoctrineListener
        arguments: [@fbn_guide.image_manager]
        tags:
            - { name: doctrine.event_subscriber, connection: default, priority: -10000 }