Symfony:无法加载Twig扩展运行时

mlnl4t2r  于 2022-11-16  发布在  其他
关注(0)|答案(2)|浏览(137)

我是按照this guide添加一个自定义的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设置为公共服务,但没有成功。
这里有什么问题?

ubbxdtey

ubbxdtey1#

最有可能的是你忘了标记你的细枝扩展服务。
下面是第一个示例中的操作说明:https://symfony.com/doc/current/service_container/tags.html

vuktfyat

vuktfyat2#

要将注解转化为答案,有两种方法可以解决此错误。

溶液1

1.实施RuntimeExtensionInterface

class AppRuntime implements RuntimeExtensionInterface

1.为运行时服务启用自动配置

App\Twig\AppRuntime:
    autoconfigure: true

溶液2

twig.runtime标记添加到运行时服务

App\Twig\AppRuntime:
    tags:
        - { name: twig.runtime }

相关问题