我搜索一种在TWIG中解析字符串的方法。
我有一个翻译文件:messages.fr.yml,我调用这样的字符串:{{ 'bloc.name'|trans() | raw }}
。
在法语中,在一些标点符号之前有一个空格。问题是当句子在标记之间被切断时。所以我想在这些标记之前替换每个空格:[ ? , ! , ; , : ]
。
我虽然有一个可以使用autoescape +正则表达式的解决方案,但我不知道如何做到这一点,如果这是最好的方法。有人有想法吗?
感谢您的帮助!
答案 0 :(得分:1)
您正在寻找:如何创建自己的Twig过滤器。
可以使用Twig Extension:http://symfony.com/doc/current/cookbook/templating/twig_extension.html
// src/AppBundle/Twig/AppExtension.php
namespace AppBundle\Twig;
class AppExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
new \Twig_SimpleFilter('nbspace', array($this, 'nbspace'))
);
}
public function nbspace($sentence)
{
return preg_replace('/ ([\?!;:])/',' $1',$sentence);
}
public function getName()
{
return 'app_extension';
}
}
然后你必须在services.yml中启用这个过滤器,如下所示:
# app/config/services.yml
services:
app.twig_extension:
class: AppBundle\Twig\AppExtension
public: false
tags:
- { name: twig.extension }
使用它:
{{ 'bloc.name'|trans() | nbspace | raw }}
无需在用例中更改autoescaping stategy。
如果你想避免原始'过滤器,您还可以指定您的过滤器返回“html'安全”的内容。 :
new \Twig_SimpleFilter('nbspace', array($this, 'nbspace'), array('is_safe'=>array('html')))