我正在使用 SonataAdminBundle 和 SonataUserBundle。
SonataUserBundle 注册了一个服务 sonata.user.admin.group
,SonataAdminBundle 会自动检测该服务,以在管理仪表板中设置链接以对 CRUD 操作进行分组。
如何禁用 sonata.user.admin.group
?我一直在遵循 Symfony2 文档中的食谱:
到目前为止,我的包定义中有以下代码来添加编译器传递:
public function build(ContainerBuilder $container)
{
parent::build($container);
$container->addCompilerPass(new CompilerPass());
}
这是编译过程:
<?php
namespace NS\Service\CompilerPass;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
class CompilerPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
$container->removeDefinition('sonata.user.admin.group');
}
}
我认为这应该可行,但不行。 Symfony 抛出异常告诉我 sonata.user.admin.group
服务不存在。但它存在,如果我执行 $container->getDefinition('sonata.user.admin.group')
实际定义返回。
谢谢
最佳答案
尝试将服务标记为抽象并将其 public
属性设置为 false,例如
#in any services.yml
services:
sonata.user.admin.group:
abstract: true
public: false
#...
完整性补充:
并添加到 CompilerPass:
$container->getDefinition('sonata.user.admin.group')->setSynthetic(true);
关于php - 禁用 SonataUserBundle sonata.user.admin.group 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13976700/