symfony 如何在我的我们的插件中可靠地使用来自ShowFly6商店插件的服务而没有问题

mrwjdhj3  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(174)

我们已经通过composer从Shopware 6商店安装了一个插件。对于我们自己的功能,我们希望使用插件中的服务。
由于商店插件6中的插件可以被禁用和/或停用,我们无法在我们自己的插件/捆绑包中从services.xml中的插件可靠地使用服务。如果商店插件仍然被禁用/未激活,我们会得到错误“服务“...”依赖于不存在的服务“。
这个例子说明了这种情况:

<services>
        <service id="MyPlugin..." public="true">
            <!-- Service might be uninstalled/inactive. Conditional?-->
            <argument type="service" id="ThirdPartyPlugin"/>
        </service>
    </services>

字符串
有没有什么最佳的做法,在Shopware中处理这种情况?我们可以实现一个条件,我们的服务将被定义只有当第三方插件是活动的?

oug3syen

oug3syen1#

你可以在连接依赖时使用on-invalid="null",这样null会被注入,而不是真实的服务,如果它不存在,你的服务仍然需要处理这种情况下应该发生的事情(例如,提前返回,错误消息等),但至少symfony容器应该再次 Boot 。
有关详细信息,请参阅https://symfony.com/doc/current/service_container/optional_dependencies.html#setting-missing-dependencies-to-null
所以对于你的例子,它应该看起来像:

<services>
        <service id="MyPlugin..." public="true">
            <!-- Service might be uninstalled/inactive. Null will be injected instead-->
            <argument type="service" id="ThirdPartyPlugin" on-invalid="null"/>
        </service>
    </services>

字符串

相关问题