在创建树枝过滤器(在控制器外部)时使用服务


Use a service when creating a twig filter (outside a controller)

我有我的类MyTwigExtension extensions ''Twig_Extension,我在其中为twig创建了过滤器。我想在实现新过滤器时使用服务。像这样:

$canView = $this->get('security_service')
                ->hasClassPermission(
                        'MyBundle:MyEntity',
                        $this->get('security.context')->getToken()->getUser(), 
                        array(MaskBuilder::MASK_VIEW)
                 );

进入控制器,这工作正常,但在它之外...

检查一下我在这里给出的关于控制器外部依赖注入的答案。

然后查看此链接,了解如何将您的TwigExtension注册为服务。

只是一个快速编辑,有时,当您TwigExtension作为服务时,您无法直接注入某些服务,因为它会导致ScopeWideningException。如果出现此异常,则可以将scope = request添加到服务定义中。如果它仍然引发异常,请注入整个依赖项容器,并执行$this->container->get('service.id.here')来检索所需的服务。

希望对您有所帮助。

问候
马 特