Twig 找不到在 TwigExtension 中创建的函数 class
Twig can't find function created inside TwigExtension class
我正在尝试调用在 TwigExtension (Symfony 3.3) 中创建的 Twig 函数。问题是我找不到我做错了什么,我不确定为什么它不起作用
有人知道问题出在哪里吗?
这是我得到的错误:
Unknown "getCurrentLocale" function.
这是我的代码:
树枝扩展:
<?php
namespace AppBundle\Extension;
use Symfony\Component\HttpFoundation\Request;
class AppTwigExtensions extends \Twig_Extension
{
protected $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function getFunctions()
{
return [
new \Twig_SimpleFunction('getCurrentLocale', [$this, 'getCurrentLocale']),
];
}
public function getCurrentLocale()
{
dump ($this->request);
/*
* Some code
*/
return "EN";
}
public function getName()
{
return 'App Twig Repository';
}
}
服务:
services:
twig.extension:
class: AppBundle\Extension\AppTwigExtensions
arguments: ["@request"]
tags:
- { name: twig.extension }
树枝:
{{ attribute(country.country, 'name' ~ getCurrentLocale() ) }}
那么您对扩展的总体计划是什么。当 app.request.locale
in twig returns 当前语言环境时你还需要它吗? (确实如此)
此外,默认情况下 @request
服务不再存在。
In Symfony 3.0, we will fix the problem once and for all by removing the request service — from New in Symfony 2.4: The Request Stack
这就是为什么你应该得到类似的东西:
The service "twig.extension" has a dependency on a non-existent service "request".
所以你做了这个服务?它加载了吗?它是什么?您可以使用 bin/console debug:container request
.
查看所有与 request
匹配的可用服务名称
如果您确实需要扩展中的请求对象,如果您打算用它做更多的事情,您可能希望将 request_stack
服务与 $request = $requestStack->getCurrentRequest();
.
一起注入
代码、symfony 版本和您发布的错误消息不知何故不相关。同样在我的测试中,一旦删除服务参数,它就可以正常工作。自己尝试减少占用空间并使其尽可能简单,在我的例子中是:
services.yml:
twig.extension:
class: AppBundle\Extension\AppTwigExtensions
tags:
- { name: twig.extension }
AppTwigExtensions.php:
namespace AppBundle\Extension;
class AppTwigExtensions extends \Twig_Extension {
public function getFunctions() {
return [
new \Twig_SimpleFunction('getCurrentLocale', function () {
return 'en';
}),
];
}
}
然后从那里开始,弄清楚什么时候出错了。
我正在尝试调用在 TwigExtension (Symfony 3.3) 中创建的 Twig 函数。问题是我找不到我做错了什么,我不确定为什么它不起作用
有人知道问题出在哪里吗?
这是我得到的错误:
Unknown "getCurrentLocale" function.
这是我的代码:
树枝扩展:
<?php
namespace AppBundle\Extension;
use Symfony\Component\HttpFoundation\Request;
class AppTwigExtensions extends \Twig_Extension
{
protected $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function getFunctions()
{
return [
new \Twig_SimpleFunction('getCurrentLocale', [$this, 'getCurrentLocale']),
];
}
public function getCurrentLocale()
{
dump ($this->request);
/*
* Some code
*/
return "EN";
}
public function getName()
{
return 'App Twig Repository';
}
}
服务:
services:
twig.extension:
class: AppBundle\Extension\AppTwigExtensions
arguments: ["@request"]
tags:
- { name: twig.extension }
树枝:
{{ attribute(country.country, 'name' ~ getCurrentLocale() ) }}
那么您对扩展的总体计划是什么。当 app.request.locale
in twig returns 当前语言环境时你还需要它吗? (确实如此)
此外,默认情况下 @request
服务不再存在。
In Symfony 3.0, we will fix the problem once and for all by removing the request service — from New in Symfony 2.4: The Request Stack
这就是为什么你应该得到类似的东西:
The service "twig.extension" has a dependency on a non-existent service "request".
所以你做了这个服务?它加载了吗?它是什么?您可以使用 bin/console debug:container request
.
request
匹配的可用服务名称
如果您确实需要扩展中的请求对象,如果您打算用它做更多的事情,您可能希望将 request_stack
服务与 $request = $requestStack->getCurrentRequest();
.
代码、symfony 版本和您发布的错误消息不知何故不相关。同样在我的测试中,一旦删除服务参数,它就可以正常工作。自己尝试减少占用空间并使其尽可能简单,在我的例子中是:
services.yml:
twig.extension:
class: AppBundle\Extension\AppTwigExtensions
tags:
- { name: twig.extension }
AppTwigExtensions.php:
namespace AppBundle\Extension;
class AppTwigExtensions extends \Twig_Extension {
public function getFunctions() {
return [
new \Twig_SimpleFunction('getCurrentLocale', function () {
return 'en';
}),
];
}
}
然后从那里开始,弄清楚什么时候出错了。