如何在树枝上拨打ucwords?

时间:2015-06-30 18:08:43

标签: twig

编辑:2016年12月3日

我在twig上发现了几个关于调用php函数的帖子,这表明应该支持它,但它似乎不起作用。

{{ ucwords( item|replace({'_':' '}) ) }}

导致:l

  

超薄应用程序错误

     

由于以下错误,应用程序无法运行:

     

详情

     

类型: Twig_Error_Syntax消息:函数“ucwords”不存在   在“home.twig”第101行

     

文件:   /usr/share/dev89/html/vhosts/local/libs/vendor/twig/twig/lib/Twig/ExpressionParser.php   行:572

4 个答案:

答案 0 :(得分:22)

正如@lxg所说,不可能从Twig模板调用所有PHP函数......除非你想这样做并定义你自己的过滤器/函数。而不是缺点,“强迫”您创建不包含太多逻辑的良好模板是一件好事。

无论如何,在这种特殊情况下,Twig已经包含一个名为title的过滤器,它应用了“标题案例”,相当于ucwords() PHP函数:

{{ item|replace({'_':' '})|title }}

答案 1 :(得分:7)

并非所有PHP函数都在Twig中可用。只有少数 Twig filtersfunctions与PHP中的等效名称相同。

但您可以轻松为ucwords创建自己的Twig extension - 过滤器以及功能:

<?php

namespace Acme\TestBundle\Twig;

class UcWordsExtension extends \Twig_Extension
{
    public function getFunctions()
    {
        return [
            new \Twig_SimpleFunction('ucwords', 'ucwords')
        ];
    }

    public function getFilters()
    {
        return [
            new \Twig_SimpleFilter('ucwords', 'ucwords')
        ];
    }

    public function getName()
    {
        return 'ext.ucwords';
    }

}

Twig_SimpleFunction / Twig_SimpleFilter的第一个参数是Twig中函数/过滤器的名称。第二个参数是PHP可调用的。由于ucfirst函数已经存在,将其名称作为字符串传递就足够了。

在树枝上测试:

{{ "test foobar"|ucwords }} {# filter #} <br>
{{ ucwords("test foobar") }} {# function #} 

返回:

Test Foobar
Test Foobar

答案 2 :(得分:3)

您可以使用大写twig过滤器:

{{ item | capitalize }}

答案 3 :(得分:0)

为什么不使用title过滤器? 我也在寻找ucwords()函数的过滤器,并在Twig Documentation中找到了该过滤器。

用法示例;

{{ 'i am raziul islam'|title }}
  

输出:我是伊斯兰伊斯兰教