Twig替换plus和字符串中的两个空格

时间:2016-07-14 12:40:47

标签: symfony twig

我对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

任何帮助非常感谢

1 个答案:

答案 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 }}

More infos here.