我对 Twig 还很陌生,所以请耐心等待:)
我有一个这样的字符串:
Some + Name
我希望改为
some-name
我正在使用替换过滤器,效果很好。但是我需要替换更多与上述字符串冲突的字符(用于网址)。
{{ product.brand.title | replace({' ' : '-', '/&' : '-', "'" : "", '+':'', '.':''}) | lower | raw }}
当使用上面的替换函数和提到的字符串时,我得到
Some--Name
完成所需字符串的最佳方法是什么?考虑到我需要将大多数字符更改为破折号。我也尝试了
escape
,但效果不佳。想想:
Dr. Brown's -> dr-browns
Burt's Bees -> burts-bees
naïf care -> naif-care
非常感谢任何帮助
您可以像这样创建自己的自定义 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 }}
如果您使用 Drupal,则有此模块:https://www.drupal.org/project/twig_slugify