symfony twig渲染动态树枝代码

时间:2015-06-17 08:57:04

标签: symfony twig

在我的symfony2动作中,我有:

$twigCode = '<li>{{ data.value }}</li>'; //In database
$datas = array(array( 'value' => 'line 1'), array( 'value' => 'line 2'));

return $this->render(
    '...List.html.twig',
    array(
        'twigCode' => $twigCode,
        'datas' => $datas
    )
);

在我的树枝模板中,我想要类似的东西:

<ul>
{% for data in data %}
    {{ render({{ twigCode }}, {data: data}) }}
{% endfor %}
</ul>

期望:

<ul>
    <li>line 1</li>
    <li>line 2</li>
</ul>

2 个答案:

答案 0 :(得分:3)

您可以在控制器中渲染和连接树枝片段:

$templating = $this->container->get('templating');
$someTwig = '';

foreach ($datas as $data)
{
    $someTwig .= $templating->render($twigCode, $data);
}

return $this->render('...List.html.twig', array('someTwig' => $someTwig));

然后在树枝上:

<ul>
    {{ someTwig | raw }}
</ul>

否则,如果你真的想在树枝上做这个,你可以写一个实现树枝功能的Custom Twig Extension&#39;渲染&#39;所以像你建议的twig片段会起作用:

在枝条扩展中(您需要将其注册为服务,请参阅上面的链接):

class MyTwigExtension extends \Twig_Extension 
{
    private $templating;

    public function__construct($templating)
    {
        $this->templating = $templating;
    }

    public function getFunctions()
    {
        return array(
            'render' => new \Twig_Filter_Method($this, 'render'), 
        );
    }

    public function render($twigFragment, array $data)
    {
        return $this->templating->render($twigFragment, $data);
    }
}

然后在树枝上:

<ul>
{% for data in data %}
    {{ render(twigCode, data) | raw }}
{% endfor %}
</ul>

注意 - 它可能会'渲染'#39;是树枝的保留字,因此自定义树枝功能可能需要不同的名称。

答案 1 :(得分:1)

您必须使用twig core或者可以自定义视图渲染

检查以下代码

$loader = new Twig_Loader_Array(array(
'index.html' => 'Hello {{ name }}!',
));
$twig = new Twig_Environment($loader);

echo $twig->render('index.html', array('name' => 'Fabien'));

点击此处查看文档:{​​{3}}