我正在使用Symfony3和noticed factory-class
和factory-method
不再存在,但factory
确实存在。
这是相当令人沮丧的,因为我想使用pulse00/ffmpeg-bundle,但services.xml
似乎是3.0之前。
正如您所看到的,4个红色标记属性是问题所在:
factory-class="%dubture_ffmpeg.ffmpeg.class%" factory-method="create"
factory-class="%dubture_ffmpeg.ffprobe.class%" factory-method="create"
示例(Symfony3版本):
services:
newsletter_manager:
class: NewsletterManager
factory: [NewsletterManagerFactory, createNewsletterManager]
问题:
如何更新services.xml以使其与Symfony3一起正常工作?
我尝试了什么:
我尝试将两者结合起来并没有取得多大成功,而是使用factory
代替。但也不允许“工厂”。
错误:
$ php bin/console server:run
我得到的错误:
不允许使用'factory-class'属性。
答案 0 :(得分:4)
捆绑包的缺点,特别是当前从2切换到3,是因为您依赖维护者来更新代码以支持新版本。
解决此问题的正常程序:
如果维护者没有响应您的请求,或者您现在真的需要它。您可以在composer.json存储库列表中添加指向fork的链接。 https://getcomposer.org/doc/05-repositories.md#loading-a-package-from-a-vcs-repository
然后它会安装你的分叉版本,其中包含修复程序。
答案 1 :(得分:3)
由于Symfony中不推荐factory-class
和factory-method
,因此
你必须使用:
XML:
<services>
<service id="dubture_ffmpeg.ffmpeg" class="NewsletterManager">
<factory class="%dubture_ffmpeg.ffmpeg.class%" method="create" />
</service>
</services>
或YAML:
services:
dubture_ffmpeg.ffmpeg:
class: NewsletterManager
factory: [%dubture_ffmpeg.ffmpeg.class%, create]
第一个参数表示class
属性,第二个参数表示method
属性。
请参阅http://symfony.com/doc/current/components/dependency_injection/factories.html
答案 2 :(得分:0)
我添加了<factory></factory>
元素,并在其中定义了属性类和方法。而且我现在能够毫无问题地运行服务器。
<service id="dubture_ffmpeg.ffmpeg" class="%dubture_ffmpeg.ffmpeg.class%" lazy="true">
<factory class="%dubture_ffmpeg.ffmpeg.class%" method="create"></factory>
<argument type="collection">
<argument key="ffmpeg.binaries">%dubture_ffmpeg.binary%</argument>
<argument key="ffprobe.binaries">%dubture_ffprobe.binary%</argument>
<argument key="timeout">%dubture_ffmpeg.binary_timeout%</argument>
<argument key="ffmpeg.threads">%dubture_ffmpeg.threads_count%</argument>
</argument>
<argument id="logger" type="service"/>
</service>
<service id="dubture_ffmpeg.ffprobe" class="%dubture_ffmpeg.ffprobe.class%" lazy="true">
<factory class="%dubture_ffmpeg.ffprobe.class%" method="create"></factory>
<argument type="collection">
<argument key="ffmpeg.binaries">%dubture_ffmpeg.binary%</argument>
<argument key="ffprobe.binaries">%dubture_ffprobe.binary%</argument>
</argument>
<argument id="logger" type="service"/>
</service>