我正在关注this guide向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
设置为公共服务,但没有运气。
这里有什么问题?
答案 0 :(得分:1)
很可能您忘了标记您的树枝扩展服务。
在这里,您可以在第一个示例中解释如何执行此操作: https://symfony.com/doc/current/service_container/tags.html