编辑:2016年12月3日
你只需要找到相当于ucwords的树枝?看到这个答案由哈维尔Eguiluz
我在twig上发现了几个关于调用php函数的帖子,这表明它应该受到支持,但它似乎不起作用.
{{ ucwords( item|replace({'_':' '}) ) }}
结果:l
超薄应用程序错误
由于以下错误,应用程序无法运行:
细节
类型: Twig_Error_Syntax消息:第101行的"home.twig"中不存在函数"ucwords"
文件: /usr/share/dev89/html/vhosts/local/libs/vendor/twig/twig/lib/Twig/ExpressionParser.php行:572
Jav*_*luz 22
正如@lxg所说,不可能从Twig模板中调用所有PHP函数......除非你想这样做并定义你自己的过滤器/函数.而不是缺点,"强迫"您创建不包含太多逻辑的良好模板是一件好事.
无论如何,在这种特殊情况下,Twig已经包含一个名为title的过滤器,它应用了"标题案例",它相当于ucwords()PHP函数:
{{ item|replace({'_':' '})|title }}
Run Code Online (Sandbox Code Playgroud)
并非所有PHP函数都在Twig中可用.只有少数 Twig 过滤器和函数与PHP中的等价物具有相同的名称.
但是你可以很容易地创建自己的枝条扩展为ucwords-过滤器以及功能:
<?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';
}
}
Run Code Online (Sandbox Code Playgroud)
Twig_SimpleFunction/ 的第一个参数Twig_SimpleFilter是Twig中函数/过滤器的名称.第二个参数是PHP可调用的.由于ucfirst函数已经存在,将其名称作为字符串传递就足够了.
在树枝上测试:
{{ "test foobar"|ucwords }} {# filter #} <br>
{{ ucwords("test foobar") }} {# function #}
Run Code Online (Sandbox Code Playgroud)
返回:
Test Foobar
Test Foobar
Run Code Online (Sandbox Code Playgroud)
为什么不使用title过滤器?我一直在寻找一个可以像ucwords()php函数一样工作的过滤器,并且title在Twig Documentation中找到了该过滤器。
使用示例;
{{ 'i am raziul islam'|title }}
Run Code Online (Sandbox Code Playgroud)
输出:我是伊斯兰教士
| 归档时间: |
|
| 查看次数: |
10363 次 |
| 最近记录: |