【问题标题】:Symfony2 + Twig: Attempted to call function "replace" from the global namespaceSymfony2 + Twig:试图从全局命名空间调用函数“replace”
【发布时间】:2015-04-20 17:48:36
【问题描述】:

我在我的应用程序中遇到了这个错误,我找不到失败的地方:

尝试从全局命名空间调用函数“replace”。

这是堆栈跟踪:

[1] Symfony\Component\Debug\Exception\UndefinedFunctionException: Attempted to call function "replace" from the global namespace.
    at n/a
        in /var/www/html/reptooln_admin/app/cache/dev/twig/eb/76/c3cb3f071f775598b83974700b4a2523941a76b0f3cf8801d01d9210eae0.php line 318

现在在我的代码中,我定义了这个 Twig 扩展:

services:
    app.twig.extension:
        class: AppBundle\Extension\AppTwigExtension
        tags:
            -  { name: twig.extension }

这是类:

<?php

namespace AppBundle\Extension;

class AppTwigExtension extends \Twig_Extension
{
    public function getFilters()
    {
        return array(
            'var_dump'   => new \Twig_Filter_Function('var_dump'),
            'empty' => new \Twig_Filter_Function('empty', array($this, 'is_empty')),
            'isset' => new \Twig_Filter_Function('isset', array($this, 'is_set')),
            'isnull' => new \Twig_Filter_Function('isnull', array($this, 'is_null')),
            'ucfirst' => new \Twig_Filter_Function('ucfirst', array($this, 'uc_first')),
            'ucwords' => new \Twig_Filter_Function('ucwords', array($this, 'uc_words')),
            'count' => new \Twig_Filter_Function('count', array($this, 'co_unt')),
            'sizeof' => new \Twig_Filter_Function('sizeof', array($this, 'size_of')),
            'concat' => new \Twig_Filter_Function('concat', array($this, 'concat')),
            'in_array' => new \Twig_Filter_Function('in_array', array($this, 'inarray')),
            'array' => new \Twig_Filter_Function('array', array($this, 'array_')),
            'add_to_array' => new \Twig_Filter_Function('add_to_array', array($this, 'add_to_array')),
            'replace' => new \Twig_Filter_Function('replace', array($this, 'replace')),
            'htmlentitydecode' => new \Twig_Filter_Function('htmlentitydecode', array($this, 'htmlentitydecode')),
        );
    }

    public function replace($subject, $search, $replace)
    {
        return str_replace($search, $replace, $subject);
    }
    // functions goes here

    public function getName()
    {
        return 'app_twig_extension';
    }
}

怎么了?我找到了this 的帖子,但对我没有帮助

【问题讨论】:

    标签: php symfony twig symfony-2.6 symfony-2.7


    【解决方案1】:

    从错误中,您似乎注册了一个名为 replace 的过滤器,但您正试图将其作为函数调用。

    所以这应该已经可以工作了(但我认为这不是你想要做的):

    {{ my_variable|replace('something', 'with', 'this') }}
    

    我认为你想要做的是:

    {{ replace(my_variable, 'replace', 'this') }}
    

    要注册一个函数,将一个名为 getFunctions 的方法添加到您的 AppTwigExtension 类中,并将 replace 定义移至该类。详情请见documentation

    【讨论】:

      猜你喜欢
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 2017-09-12
      • 2013-11-19
      • 2012-11-07
      • 1970-01-01
      相关资源
      最近更新 更多