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

问题描述 投票:0回答:2

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

非常感谢任何帮助

symfony twig
2个回答
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 }}

更多信息请点击这里。


0
投票

如果您使用 Drupal,则有此模块:https://www.drupal.org/project/twig_slugify

© www.soinside.com 2019 - 2024. All rights reserved.