Php 细枝-应用默认过滤器加载模板

Php 细枝-应用默认过滤器加载模板,php,twig,Php,Twig,我希望在默认情况下对所有变量应用过滤器,以避免出现以下情况: {% set var = "%gg% man" %} {% block body %} <h1>You are a {{ var|replace({'%gg%':good, '%bb%':bad}) }}</h1> {% block body %} {%set var=“%gg%man”%} {%block body%} 你是一个{var | replace({'%gg%':good,'%bb%':bad}}

我希望在默认情况下对所有变量应用过滤器,以避免出现以下情况:

{% set var = "%gg% man" %}
{% block body %}
<h1>You are a {{ var|replace({'%gg%':good, '%bb%':bad}) }}</h1>
{% block body %}
{%set var=“%gg%man”%}
{%block body%}
你是一个{var | replace({'%gg%':good,'%bb%':bad}}}
{%block body%}
关于输出: 你是个好人


有解决方案吗?

您可以创建一个过滤细枝

// src/AppBundle/Twig/AppExtension.php
namespace AppBundle\Twig;

class AppExtension extends \Twig_Extension
{
    public function getFilters()
    {
        return array(
            new \Twig_SimpleFilter('customReplace', array($this, 'customReplaceFilter')),
        );
    }

    public function customReplaceFilter(yourArguments)
    {
        //do your replace here in PHP

        return [your string after replace];
    }

    public function getName()
    {
        return 'app_extension';
    }
}
在你的小树枝上

{{ var|customReplace(yourArguments) }}
不要在你的app/config/services.yml中忘记这一点:

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

您好,谢谢您的回答,但是,我使用的是没有Symfony的Twig。因此,我没有
src/AppBundle/Twig/
路径。我还有一个问题,当replace参数有一个HTML标记时,输出被转义!1-在没有symfony框架的情况下,如何创建过滤器扩展?2-如何在不禁用转义过滤器的情况下在浏览器上正确显示标记?我的答案是针对symfony 2。来源:欢迎使用堆栈溢出。请解释你的意思以避免这种情况:你指的是第一行吗?第三个?