编辑:2016年12月3日
想要了解如何向树枝添加自定义扩展程序(过滤器)?请this answer
你只需要找到与ucwords相同的树枝?请this answer
我在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
答案 0 :(得分:22)
正如@lxg所说,不可能从Twig模板调用所有PHP函数......除非你想这样做并定义你自己的过滤器/函数。而不是缺点,“强迫”您创建不包含太多逻辑的良好模板是一件好事。
无论如何,在这种特殊情况下,Twig已经包含一个名为title的过滤器,它应用了“标题案例”,相当于ucwords()
PHP函数:
{{ item|replace({'_':' '})|title }}
答案 1 :(得分:7)
并非所有PHP函数都在Twig中可用。只有少数 Twig filters和functions与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 }}
输出:我是伊斯兰伊斯兰教