2016-07-14 1 views
0

ich ziemlich neu bin mit mir so tragen Twig :)Zweig ersetzt plus und zwei Räume in String

ich eine Zeichenfolge wie diese:

Some + Name 

ich, dass zu

geändert will
some-name 

Ich benutze den Replace-Filter, der gut funktioniert. Allerdings muss ich eine Menge mehr Zeichen (für die Verwendung in URLs) ersetzen, die mit der obigen Zeichenfolge in Konflikt stehen.

{{ product.brand.title | replace({' ' : '-', '/&' : '-', "'" : "", '+':'', '.':''}) | lower | raw }} 

Wenn die obige Ersetzen-Funktion mit dem String erwähnt unter Verwendung bekomme ich

Some--Name 

Was ist der beste Weg wäre, um die gewünschte Zeichenfolge zu erreichen ?? Ich muss die meisten Zeichen in Bindestriche ändern. Ich versuchte auch escape, aber das hat nicht richtig funktioniert. Denken Sie an:

Dr. Brown's -> dr-browns 
Burt's Bees -> burts-bees 
naïf care -> naif-care 

Jede Hilfe sehr geschätzt

+0

Sie können jederzeit eine Erweiterung der eigenen schreiben, und alles tun, die Logik erforderlich, da rein und einfach das gewünschte Ergebnis zurück. Es gibt ein Kapitel zu diesem Thema im CookBook - http://symfony.com/doc/current/cookbook/templating/twig_extension.html – Artamiel

Antwort

3

Sie können Ihre eigenen Zweig Erweiterung so erstellen:

1- Der Zweig Erweiterungsklasse:

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- Register Ihre Zweigverlängerung:

services: 
    app.slugify_extension: 
     class: AppBundle\Twig\AppExtension 
     public: false 
     tags: 
      - { name: twig.extension } 

3- dann verwenden:

{{ product.brand.title|slugify }} 

More infos here.