如何删除Symfony2中的服务定义?

时间:2015-09-04 08:38:00

标签: php symfony

此定义已添加到Symfony https://github.com/symfony/symfony/blob/2.8/src/Symfony/Bundle/FrameworkBundle/Resources/config/translation.xml#L156

的v2.7中

这是因为TranslationsCacheWarmer添加在2.7:https://github.com/symfony/FrameworkBundle/commit/4d4a85bed21604132db86d24d0af101518a18d50

不幸的是,这破坏了我的一些代码,这在我尝试清除Symfony缓存时很明显。我使用PHP来处理翻译,这些文件中有一些自定义代码(即依赖于相对路径的DirectoryIterator ......),现在正在破坏。

我的计划是为此提出一个正确的解决方法。但是,作为短期修复 - 是否可以删除该定义,我在此消息的第一行引用?我的理解是,当我运行php app/console cache:clear --env=prod

时,这将阻止TranslationsCacheWarmer做任何事情

我知道我可能只是从translation.xml中删除该块 - 但是,它嵌入在vendor/目录的深处,这显然不是我的git存储库的一部分。理想情况下,我希望能够通过仅编辑自己的代码来解决这个问题,以便更改将流向其他人。我希望也许有一些方法可以覆盖它,可能是通过编译器传递或其他东西?

有人有任何建议吗?

1 个答案:

答案 0 :(得分:8)

要取消注册其他捆绑包注册的服务,您可以使用compiler pass

它看起来像:

<?php

namespace Acme\Bundle\AppBundle\DependencyInjection\Compiler;

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;

class UnregisterThirdPartyServicesPass implements CompilerPassInterface
{
    public function process(ContainerBuilder $container)
    {
        $container->removeDefinition('translation.warmer');
    }
}