我对Twig很新,所以忍受我:)
我有一个这样的字符串:
Some + Name
我希望将其更改为
some-name
我正在使用可以很好地工作的替换过滤器。但是我需要替换与上面的字符串冲突的更多字符(用于url)。
{{ product.brand.title | replace({' ' : '-', '/&' : '-', "'" : "", '+':'', '.':''}) | lower | raw }}
当使用上面提到的字符串替换函数时,我得到了
Some--Name
完成所需字符串的最佳方法是什么?考虑到我需要将大多数字符更改为破折号。我也试过escape
,但是没有正常工作。想一想:
Dr. Brown's -> dr-browns
Burt's Bees -> burts-bees
naïf care -> naif-care
任何帮助非常感谢
答案 0 :(得分:3)
您可以创建自己的自定义Twig扩展程序:
1- Twig扩展类:
class SlugifyExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
new \Twig_SimpleFilter('slugify', array($this, 'slugifyFilter')),
);
}
public function slugifyFilter($string)
{
$string = preg_replace('~[^\pL\d]+~u', '-', $string);
$string = iconv('utf-8', 'us-ascii//TRANSLIT', $string);
$string = preg_replace('~[^-\w]+~', '', $string);
$string = trim($string, '-');
$string = preg_replace('~-+~', '-', $string);
$string = strtolower($string);
if (empty($string)) {
return 'n-a';
}
return $string;
}
public function getName()
{
return 'slugify_extension';
}
}
2-注册你的Twig扩展名:
services:
app.slugify_extension:
class: AppBundle\Twig\AppExtension
public: false
tags:
- { name: twig.extension }
3-然后使用它:
{{ product.brand.title|slugify }}