Twig无法找到TwigExtension类中创建的函数

时间:2017-06-08 12:42:09

标签: php symfony twig twig-extension

我正在尝试调用在TwigExtension(Symfony 3.3)中创建的Twig函数。问题是我找不到我做错了什么,我不确定为什么它不起作用

有人知道问题出在哪里吗?

这是我得到的错误:

Unknown "getCurrentLocale" function.

这是我的代码:

Twig Extension:

<?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() )  }}

1 个答案:

答案 0 :(得分:1)

那么你的扩展计划是什么?当twig中的app.request.locale返回当前区域设置时,您是否还需要它? (它确实如此)

默认情况下,@request服务不再存在。

  

在Symfony 3.0中,我们将通过删除请求服务一劳永逸地解决问题 - 来自New in Symfony 2.4: The Request Stack

这就是为什么你应该得到类似的东西:

  

服务&#34; twig.extension&#34;依赖于不存在的服务&#34;请求&#34;。

所以你做了这项服务?它加载了吗?它是什么?您可以使用request查看与bin/console debug:container 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';
            }),
        ];
    }
}

从那里拿走它,弄清楚它何时出错。