禁用 SonataUserBundle sonata.user.admin.group 服务
Posted
技术标签:
【中文标题】禁用 SonataUserBundle sonata.user.admin.group 服务【英文标题】:Disable SonataUserBundle sonata.user.admin.group service 【发布时间】:2012-12-08 05:46:18 【问题描述】:我正在使用 SonataAdminBundle 和 SonataUserBundle。
SonataUserBundle 注册了一个服务 sonata.user.admin.group
,它会被 SonataAdminBundle 自动检测到,以在管理仪表板中设置链接以对 CRUD 操作进行分组。
如何禁用sonata.user.admin.group
?我一直在关注 Symfony2 文档中的那些食谱:
How to Override any Part of a Bundle - Services and Configuration
Compiling the Container - Creating a Compiler Pass
Working with Container Parameters and Definitions
到目前为止,我的包定义中有以下代码来添加编译器通道:
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')
实际定义是返回。
谢谢
【问题讨论】:
【参考方案1】:尝试将服务标记为抽象并将其 public
属性设置为 false,例如
#in any services.yml
services:
sonata.user.admin.group:
abstract: true
public: false
#...
完整性补充:
并添加到 CompilerPass:
$container->getDefinition('sonata.user.admin.group')->setSynthetic(true);
【讨论】:
行得通!但是将以下内容添加到CompilerPass
:$container->getDefinition('sonata.user.admin.group')->setSynthetic(true);
谢谢,一直在找这个!
实施解决方案的两个建议部分会引发错误“综合服务(“sonata.user.admin.group”)必须是公共的。”在cache:clear
。但是,仅第一部分本身对我来说就很好:添加 CompilerPass
部分有什么不同?【参考方案2】:
您已删除服务定义,但它仍在仪表板上使用。这就是 Symfony 抱怨的原因(仪表板试图访问它)。这不是一项可选服务。
您可以尝试覆盖仪表板模板并避免使用该服务吗?这样就不会调用服务,您也不必将其删除。如果不使用服务,则永远不会创建它。
替代方案是使用您的实现重载服务。
【讨论】:
好的,当然,这是有道理的。但我认为仪表板模板与它无关:goo.gl/vc4rk 我在 SonataUserBundle 视图中也看不到任何关系:goo.gl/oSjdY 知道它在哪里管理吗? 比很多@JakubZalas,你的回答直指正确的问题以上是关于禁用 SonataUserBundle sonata.user.admin.group 服务的主要内容,如果未能解决你的问题,请参考以下文章
SonataUserBundle 的 check_path 异常
SonataUserBundle 覆盖 EditableRolesBuilder