Symfony:删除服务(cmf_block.reference_admin)



我想从Symfony注销服务cmf_block.reference_admin。经过一番研究,我发现应该通过CompilerPass来完成。以下是我如何删除它:

namespace PortalBundleDependencyInjectionCompiler;
use SymfonyComponentDependencyInjectionCompilerCompilerPassInterface;
use SymfonyComponentDependencyInjectionContainerBuilder;
class UnregisterThirdPartyServicesPass implements CompilerPassInterface
{
    public function process(ContainerBuilder $container)
    {
        if($container->getDefinition('cmf_block.reference_admin'))
            $container->removeDefinition('cmf_block.reference_admin');
    }
}

完成后,我得到一个错误:

未捕获异常"Symfony\Component\DependencyInjection\exception\ServiceNotFoundException",消息为"您已请求xxx\cmf sandbox master\app\bootstrap.php.cache:2198堆栈跟踪:#0 xxx\cmf沙箱master\app/cache\dev\classes.php(11818):Symfony\coomponent\DependencyInjection\Container->get('cmm_block.refer…')#1xxx\cmf sandbox master\vendor\sonata project\admin bundle\RoutesCacheWarmUp.php(47):sonata\AdminBundle\admin\Pool->getInstanceSymfony\Component\HttpKernel\CacheWarmer\CacheWarmer Aggregate->预热('C:\in xxx\cmf sandbox master\app\bootstrap.hp.cache on line 2198

也许你们中的某个人可以帮助我,或者知道如何从我的Symfony中删除CMF块捆绑包的参考块功能。

提前感谢!

在尝试删除服务之前检查服务是否存在,例如:

public function process(ContainerBuilder $container)
    {
        if ($container->hasDefinition('cmf_block.reference_admin'))
         {
           $container->removeDefinition('cmf_block.reference_admin');
         }
    }

并在服务可以真正存在于容器中的那一刻添加编译器通行证。在这里查看如何控制通行证排序。例如,注册如下:

// ...
$container->addCompilerPass(
    new CustomPass(),
    PassConfig:: TYPE_REMOVE
);

希望这能帮助

好吧,我似乎无法注销这个特定的服务。我认为它在第三方捆绑包中太深了。

我现在的解决方法(非常简单,并不让我高兴):不允许每个用户都使用该服务的所有路由,这样就无法访问它,并从面板中删除链接。

谢谢你的帮助-如果有人知道如何使上述工作-我会一直感兴趣!

最新更新