如何实现与第三方捆绑包相关的服务


How to implement services that relate to third party bundles?

Symfony有一件事是我不想错过的,因为我以为我不能理解得那么好。你能帮我吗?我将以包VichUploaderBundle为例,但在其他包中也会发生同样的情况。

文档说明如何创建自定义目录,但在我的情况下,我想从news关联到id。目录示例:upload/news/:news_id/image.jpg

我理解的是,我必须创建两个不同的服务,一个用于upload_destination,另一个用于directory_namer,我是对的?

config.yml

vich_uploader: 
    # ... 
    mappings: 
    product_image: 
    upload_destination: news_image 
    directory_namer:    my.directory_namer.news  

但是我怎么能做到呢?如果我遵循Symfony的文档,我应该这样创建Synfony服务

我应该遵循哪些步骤?我想在我的Newsbundle中创建一个类,并将其分配为"服务"。它好吗?

我如何在class中捕获我已创建为servicenews_id ?和优良的image_name保存在database ?然后保存custom directory也?

这对我来说是一件非常重要的事情,因为我认为知道这有助于我理解其他包以及如何应用它们。

总结:

如何用新闻的id保存到自定义目录,如何用新闻的id重命名图像?

我希望你能帮助我。

谢谢,卡洛斯。

与外部bundle交互的方式有多种:

  • 使用由bundle触发的事件
  • 配置覆盖
  • 声明将被bundle操作的服务(就像在你的例子中一样)
  • 覆盖包——有些包会把一些类路径放到它们的配置中,你可以通过覆盖这个来使用你自己的类。

我从未使用过VichUploaderBundle,但是在快速查看了他的文档之后,似乎您的服务名为"my.directory_namer"。>DirectoryNamerInterface (https://github.com/dustin10/VichUploaderBundle/blob/master/Naming/DirectoryNamerInterface.php)

然后,您可以定义接口强加的"directoryName"方法,并将您的逻辑放入其中,以从对象(新闻)构建目录名称。

希望这对你有帮助。

最诚挚的问候,J