我是按照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
设置为公共服务,但没有成功。
这里有什么问题?
2条答案
按热度按时间ubbxdtey1#
最有可能的是你忘了标记你的细枝扩展服务。
下面是第一个示例中的操作说明:https://symfony.com/doc/current/service_container/tags.html
vuktfyat2#
要将注解转化为答案,有两种方法可以解决此错误。
溶液1
1.实施
RuntimeExtensionInterface
1.为运行时服务启用自动配置
溶液2
将
twig.runtime
标记添加到运行时服务