Использовать службу при создании фильтра веток (вне контроллера)

У меня есть класс MyTwigExtension extends \Twig_Extension, где я создал свои фильтры для twig. Я хочу использовать сервис в реализации нового фильтра. Что-то вроде этого:

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

В контроллере это работает нормально, но вне его...


person Oriam    schedule 23.04.2012    source источник


Ответы (1)


Проверьте этот ответ, который я дал о внедрении зависимостей вне контроллера здесь.

Затем проверьте эту ссылку, чтобы узнать, как зарегистрировать TwigExtension в качестве службы.

Просто быстрое редактирование: иногда, когда вы выполняете TwigExtension как сервис, вы не можете напрямую внедрить какой-либо сервис, потому что это вызывает ScopeWideningException. Если вы получили это исключение, вы можете добавить scope = request в определение службы. Если он по-прежнему выдает исключение, внедрите весь контейнер зависимостей и выполните $this->container->get('service.id.here'), чтобы получить нужные вам службы.

Надеюсь, поможет.

С уважением,
Мэтт

person Matt    schedule 23.04.2012