首页 > 解决方案 > Symfony:无法加载 Twig 扩展运行时

问题描述

我正在按照本指南向 Symfony 4 项目添加自定义 Twig 扩展。

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为公共服务,但没有运气。

这里有什么问题?

标签: symfonytwig

解决方案


很可能您忘记标记您的树枝扩展服务。

在这里,您可以在第一个示例中解释如何执行此操作: https ://symfony.com/doc/current/service_container/tags.html


推荐阅读