Symfony: невозможно загрузить среду выполнения Twig Extension

Я следил за это руководство, чтобы добавить собственное расширение Twig в проект Symfony 4.

Мой App\Twig\AppExtension выглядит следующим образом:

<?php

namespace App\Twig;

use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;

class AppExtension extends AbstractExtension
{
    public function getFunctions()
    {
        return [
            new TwigFunction('getController', [AppRuntime::class, 'getController'])
        ];
    }
}

И мой App\Twig\AppRuntime:

<?php

namespace App\Twig;

use Symfony\Component\HttpFoundation\RequestStack;

class AppRuntime
{
    private $request;

    public function __construct(RequestStack $requestStack)
    {
        $this->request = $requestStack->getCurrentRequest();
    }

    public function getController()
    {
        return $this->request->get('_controller');
    }
}

Но если я попытаюсь использовать функцию getController() в шаблоне, я получаю следующее исключение: Невозможно загрузить среду выполнения «App \ Twig \ AppRuntime».

Следующая строка из шаблона Twig вызывает эту ошибку:

echo twig_escape_filter($this->env, $this->env->getRuntime('App\Twig\AppRuntime')->getController(), "html", null, true);

php bin/console debug:container показывает App\Twig\AppRuntime как правильный сервис. Я также пробовал настроить App\Twig\AppRuntime как общественную службу, но безуспешно.

В чем тут может быть проблема?

Какая у вас версия Twig? Поддержка того, что вы делаете, была добавлена ​​в Twig 1.26.

Jason Roman 13.06.2018 21:08

Вы пометили сервис App\Twig\AppRuntime тегом twig.runtime?

vstm 13.06.2018 21:21

Да, это был тег twig.runtime. Это нигде не задокументировано ...

spajak 14.06.2018 11:01

Фактически, это задокументировано в руководстве, которое вы связали, но с очень незаметной печатью в самом конце инструкции. У меня была точно такая же проблема, когда я впервые делал расширение Twig, но через некоторое время я наконец заметил это :)

Jacek Dziurdzikowski 19.06.2018 00:38

вам не хватало implements RuntimeExtensionInterface

Piotr 01.03.2019 13:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
5
1 700
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Скорее всего, вы забыли пометить свой сервис расширения ветки.

Вот объяснение, как это сделать в первом примере: https://symfony.com/doc/current/service_container/tags.html

Другие вопросы по теме