我想从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
);
希望这能帮助
好吧,我似乎无法注销这个特定的服务。我认为它在第三方捆绑包中太深了。
我现在的解决方法(非常简单,并不让我高兴):不允许每个用户都使用该服务的所有路由,这样就无法访问它,并从面板中删除链接。
谢谢你的帮助-如果有人知道如何使上述工作-我会一直感兴趣!