3

当我想在 Twig 中使用拆分功能时遇到问题,我有这样的词Male\tDoctor,我想使用\tascii 拆分该词,

我在搜索引擎中搜索,我在这个url中讨论了关于 twig split 问题我读到了,我认为问题已经解决,但是当我在 twig 网站文档中搜索时,我找不到split您可以阅读过滤器功能。

当我尝试使用此代码时

{{ var | split('\t') }) 

回报是The filter "split" does not exist

你对解决这个问题有什么想法或建议吗?

感谢您的回答...:)

注意:
我正在使用fuelphp框架和树枝模板

4

3 回答 3

10

仅出于完整性考虑:
F21 提到的 PR 现在已合并(自 19.10.2012 起)并且 twig 支持拆分: http ://twig.sensiolabs.org/doc/filters/split.html

{{ "one,two,three"|split(',') }}
{# returns ['one', 'two', 'three'] #}
于 2012-10-23T15:59:40.617 回答
1

Twig master 中尚不存在拆分功能。您链接到的拉取请求仍然open并且尚未合并到 Twig 的存储库中。

但是,您可以在自己的扩展中简单地实现拆分过滤器。然后,一旦 Twig 在其核心扩展中包含此过滤器,只需删除您创建的扩展即可。

在自己的扩展中创建自己的过滤器很容易:http ://twig.sensiolabs.org/doc/advanced.html#filters

于 2012-07-11T03:34:14.813 回答
1

在fuelphp框架的twig中添加这个函数来设置自定义过滤器到这个文件fuel/packages/parser/classes/twig/fuel/extension.php

      /**
        * Returns a list of filters to add to the existing list.
        *
        * @return array An array of filters
        */
        public function getFilters()
        {
            //custom by viyancs adding splite function because not found in twig documentation
             return array(
                 'explode'       => new Twig_Filter_Function('Class::explode_custom', array('pre_escape' => 'html', 'is_safe' => array('html'))),
                 );
        }

并在另一个类中声明explode_custom函数,在这种情况下,您可以使用相同的类或它所依赖的另一个类。

   /*
    * adding custom function for split character
    * used for fuel/app/classes/twig/fuel/extension.php
    * @params
    *  $string : this is twig variable or value example {{ test }}
    *  $split  : this is split character example {{ test\tdata | split('\t') }} \t is split character
    * @return 
    *  array of explode
    * 
    */
    public function explode_custom($string,$split)
    {
        $data = explode($split, $string);
        return $data;
    }

并使用它

{% set varStack = "stack[tab]overflow" | explode('\t') %}
                    {% for value in varStack %}
                    <li>{{ value }}</li>
                    {% endfor %}

结果是

stack
overflow
于 2012-07-11T09:27:48.513 回答