原则:Symfony2侦听器与inclass生命周期回调

mr12086

我一直在使用一个图像实体,当该图像实体持久化时,它使用内部方法来保存/移动/删除使用挂钩注释关联的图像文件,但我觉得该实体本身应该只是相关的获取器和设置器。

我应该将方法留在实体中还是将其移至侦听器类?

该实体具有以下方法:

  • 生成唯一的文件名/路径
  • 持久保存映像文件到磁盘
  • 删除级联图像。

但我不确定我是否喜欢这个存在于我的实体中。

/**
 * @ORM\PostPersist()
 * @ORM\PostUpdate()
 */
public function upload()
{
    if(null === $this->getFile()) {
        return;
    }

    // throws exception on error - stopping persist
    $this->getFile()->move($this->getUploadRootDir(), $this->url);

    if(isset($this->tmp)) {
        unlink($this->getUploadRootDir() . '/'. $this->tmp);
        $this->tmp = null;
    }

    $this->file = null;
}

所以我想使用下面的示例将它们移到侦听器类中,但是我不喜欢这样的想法:检查每种类型的实体是否持久并且只关心“图像”实体:

public function postPersist(LifecycleEventArgs $args)
{
    $entity = $args->getEntity();
    $entityManager = $args->getEntityManager();

    if ($entity instanceof Image) {
        // ... do something with the Product
    }
}
webDEVILopers

这实际上取决于用例。引用烹饪书中有关如何处理文件上传的内容

使用生命周期回调是一种受限制的技术,存在一些缺点。如果要删除Document :: getUploadRootDir()方法内的硬编码DIR引用,最好的方法是开始使用显式的教义侦听器。在那里,您将能够注入内核参数,例如kernel.root_dir,以便能够建立绝对路径。

如果您希望两全其美,则可以使用Entity Listeners该监听器将仅在该单个实体上触发,而不是监听所有实体:

我还建议您查看可上传的学说扩展,它应该提供您需要的所有功能。

它还提供了设置默认上传路径的方法:http : //www.obverse.com/2013/03/the-trick-to-getting-gedmo-uploadable-working-with-sonata-admin/

stof_doctrine_extensions:
    default_locale: en_US
    uploadable:
        # Default file path: This is one of the three ways you can configure the path for the Uploadable extension
        default_file_path: %kernel.root_dir%/../web/uploads

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ObservableOnSubscribe 回调中侦听器的生命周期是什么 - Rxjava

来自分类Dev

片段生命周期的侦听器

来自分类Dev

Java流生命周期回调

来自分类Dev

javascript异步回调生命周期

来自分类Dev

AngularJS指令/控制器生命周期并取消绑定$ watch和$ on侦听器

来自分类Dev

与活动生命周期有关的侦听器行为

来自分类Dev

如何使服务在生命周期事件侦听器中工作

来自分类Dev

在事务的生命周期(调用)中何时触发 Blockevent 侦听器?

来自分类Dev

SailsJS:beforeUpdate(生命周期回调),访问当前值

来自分类Dev

SailsJS:beforeUpdate(生命周期回调),访问当前值

来自分类Dev

在onDestroy之后,将重新调用生命周期回调

来自分类Dev

生命周期回调订单,“不保持活动”模式

来自分类Dev

Symfony2 postUpdate侦听器不起作用

来自分类Dev

Symfony2主义侦听器postPersist不调用

来自分类Dev

Symfony2注销事件侦听器问题

来自分类Dev

Symfony2:将事件更改为侦听器

来自分类Dev

Symfony2主义侦听器postPersist不调用

来自分类Dev

Android侦听器/回调如何?

来自分类Dev

Android侦听器/回调如何?

来自分类Dev

屏幕解锁或应用切换时的iOS视图/控制器生命周期回调

来自分类Dev

向类org.springframework.web.context.request.RequestContextListener的侦听器实例发送请求初始化的生命周期事件的异常

来自分类Dev

symfony2:如何创建在任何其他侦听器之前被调用的侦听器?

来自分类Dev

symfony2:如何创建在任何其他侦听器之前被调用的侦听器?

来自分类Dev

单例会话bean的生命周期回调方法中的事务属性

来自分类Dev

是否在UI线程上调用了Android.App.Application活动生命周期回调?

来自分类Dev

如何在SailsJS中更新记录而不触发模型生命周期回调

来自分类Dev

如何在sails.js生命周期回调中访问请求对象?

来自分类Dev

从推入打开应用程序时,活动生命周期回调的不同调用顺序

来自分类Dev

在构造函数中定义自定义元素的生命周期回调

Related 相关文章

  1. 1

    ObservableOnSubscribe 回调中侦听器的生命周期是什么 - Rxjava

  2. 2

    片段生命周期的侦听器

  3. 3

    Java流生命周期回调

  4. 4

    javascript异步回调生命周期

  5. 5

    AngularJS指令/控制器生命周期并取消绑定$ watch和$ on侦听器

  6. 6

    与活动生命周期有关的侦听器行为

  7. 7

    如何使服务在生命周期事件侦听器中工作

  8. 8

    在事务的生命周期(调用)中何时触发 Blockevent 侦听器?

  9. 9

    SailsJS:beforeUpdate(生命周期回调),访问当前值

  10. 10

    SailsJS:beforeUpdate(生命周期回调),访问当前值

  11. 11

    在onDestroy之后,将重新调用生命周期回调

  12. 12

    生命周期回调订单,“不保持活动”模式

  13. 13

    Symfony2 postUpdate侦听器不起作用

  14. 14

    Symfony2主义侦听器postPersist不调用

  15. 15

    Symfony2注销事件侦听器问题

  16. 16

    Symfony2:将事件更改为侦听器

  17. 17

    Symfony2主义侦听器postPersist不调用

  18. 18

    Android侦听器/回调如何?

  19. 19

    Android侦听器/回调如何?

  20. 20

    屏幕解锁或应用切换时的iOS视图/控制器生命周期回调

  21. 21

    向类org.springframework.web.context.request.RequestContextListener的侦听器实例发送请求初始化的生命周期事件的异常

  22. 22

    symfony2:如何创建在任何其他侦听器之前被调用的侦听器?

  23. 23

    symfony2:如何创建在任何其他侦听器之前被调用的侦听器?

  24. 24

    单例会话bean的生命周期回调方法中的事务属性

  25. 25

    是否在UI线程上调用了Android.App.Application活动生命周期回调?

  26. 26

    如何在SailsJS中更新记录而不触发模型生命周期回调

  27. 27

    如何在sails.js生命周期回调中访问请求对象?

  28. 28

    从推入打开应用程序时,活动生命周期回调的不同调用顺序

  29. 29

    在构造函数中定义自定义元素的生命周期回调

热门标签

归档