Twig:如何在Twig中使用正则表达式生成Slug?

3

我想要对一个值进行slugify,例如"slugName = Spain & Italy"

当我在TWIG中使用{{ slugName|slugify }}来创建我的slug时,结果是Spain_amp_Italy

是否可以在Twig中设置一个正则表达式,使得"&"被翻译为"and"? 谢谢


考虑制作自己的Twig过滤器:http://symfony.com/doc/current/cookbook/templating/twig_extension.html 这是一项有用的技能,可以让您完全掌控slugify。提示:查看Twig的slugify源代码。 - Cerad
2个回答

5
你可以联结多个过滤器,使用一个简单的函数replace():
{{ slugName| replace({'&': 'and'}) | slugify }}

是的,我已经使用一个字符串进行了测试。你能检查一下 slugName 的值是多少吗? - Alessandro Lai
当我执行 {{ '&tt&'| replace({'&': '-'})|slugify }} 时,结果为 "tt"。 - Zwen2012
这是因为 slugify 会删除末尾和开头的空格或 - - Alessandro Lai

2
您可以创建一个自定义函数来完成这个任务。
<?php
$twig->addFilter(new Twig_Filter('ampersand_to_and', function( $string = '' ) {

    return preg_replace('/(&amp;|&)/m', 'and', $string );
}));

然后您可以按以下方式使用它:
<p>{{ 'Spain & Italy'|ampersand_to_and }}</p>
<p>{{ 'Spain &amp; Italy'|ampersand_to_and }}</p>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接