Symfony vich 上传器和学说可记录扩展问题?

我正在使用这两个库来创建一个使用图片的实体,vich/uploader-bundle并且我正在使用loggable提供的学说扩展记录实体更改历史记录,该扩展stof/doctrine-extensions-bundle提供了atlantic18/doctrineextensions.


所以问题来了:我有一个实体,它有一个 Vich 可上传图片字段,它使用的是带有注释的学说的 Gedmo 可记录扩展。


/**

 * @var VersionedFile

 *

 * @ORM\Embedded(class="App\Entity\Embedded\VersionedFile")

 *

 * @Gedmo\Versioned()

 */

private $picture;


/**

 * @var File

 *

 * @Vich\UploadableField(

 *     mapping="user_picture",

 *     fileNameProperty="picture.name",

 *     size="picture.size",

 *     mimeType="picture.mimeType",

 *     originalName="picture.originalName",

 *     dimensions="picture.dimensions

 * )

 */

private $pictureFile;


/**

 * @var DateTimeInterface

 *

 * @ORM\Column(type="datetime", nullable=true)

 *

 * @Gedmo\Versioned()

 */

private $pictureUpdatedAt;

嵌入式实体类App\Entity\Embedded\VersionedFile具有所有需要的注释,以便使用可记录的学说扩展正确地进行版本控制。


// Not the whole code but just to get the idea for property versioning


/**

 * @ORM\Column(name="name", nullable=true)

 *

 * @Gedmo\Versioned()

 */

protected $name;

现在的问题。当我上传文件并保留实体时,会发生以下事情。实体管理器持久化实体并调用 Gedmo 可记录侦听器 ( Gedmo\Loggable\LoggableListener)的 onFlush 方法。此侦听器检查更改并安排要插入的日志条目。


问题是 VichUploader s upload listener (Vich\UploaderBundle\EventListener\Doctrine\UploadListener ) is called after the loggable listener and then the file is uploaded which changes the properties name, size, etc. The computed changes about name, size, etc. are not available in theLoggableListener` 因为它首先被调用,所以它不知道应该插入它们。


我是缺少一些配置还是我做错了什么。这个想法是记录对图片所做的更改。目前在数据库中,日志条目仅包含$pictureUpdatedAt字段。


我调试了问题,我能看到的只是顺序,并且LoggableListener方法getObjectChangeSetData中只返回$pictureUpdatedAt已更改的字段。我认为这与 Embedded 实体没有共同之处,因为我认为听众的调用顺序是问题所在。我的第一个想法是更改侦听器的优先级,但即使我这样做,调用的顺序也不会改变,主要是因为在onFlush调用时它会触发preUpdate触发UploadListener上传程序包的方法。


牛魔王的故事
浏览 119回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP