Twig" trim"没有按预期工作

时间:2015-04-17 13:43:35

标签: php symfony twig

使用此Twig模板:

{% for line in lines%}
    {{line}} after trim('.php') is: {{line|trim('.php')}}<br>
{% endfor %}

使用Silex中的控制器渲染上述模板:

$app->get('/try', function () use ($app)
{
    $lines=[];
    $lines[]='123.php';
    $lines[]='news.php';
    $lines[]='map.php';

    return $app['twig']->render('try.html.twig', ['lines'=>$lines]);
}
    );

我收到以下输出:

123.php after trim('.php') is: 123
news.php after trim('.php') is: news
map.php after trim('.php') is: ma

请注意最后一个修剪:map.php应该变为map但现在是ma

3 个答案:

答案 0 :(得分:5)

根据其他列出的答案,您误解了Twig的trim函数如何工作(将参数用作字符映射)。

您可能正在寻找的是replace过滤器:

{% for line in lines %}
    {{ line }} after replace({'.php': ''}) is: {{ line|replace({'.php': ''}) }}<br>
{% endfor %}

答案 1 :(得分:4)

我认为这是预期的行为。

trim()不会修剪子字符串,而是修剪字符列表。

所以:

map.php after trim('.php') is: ma

map.php -> does it start/end with any of ['.php'] -> TRUE  -> map.ph
map.ph  -> does it start/end with any of ['.php'] -> TRUE  -> map.p
map.p   -> does it start/end with any of ['.php'] -> TRUE  -> map.
map.    -> does it start/end with any of ['.php'] -> TRUE  -> map
map     -> does it start/end with any of ['.php'] -> TRUE  -> ma
ma      -> does it start/end with any of ['.php'] -> FALSE -> ma

它的行为与:php's trim()

完全相同

希望这有帮助。

答案 2 :(得分:2)

修剪(与实际的PHP函数一样)使用参数(或常规PHP中的第二个参数)作为字符映射而不是设置字符串。

这个论点可以更好地解释为a list of characters that, if found in any order, will be trimmed from the beginning or end of the given string