gpt4 book ai didi

symfony twig 渲染动态 Twig 代码

转载 作者:行者123 更新时间:2023-12-04 02:20:16 25 4
gpt4 key购买 nike

在我的 symfony2 Action 中,我有:

$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
)
);

在我的 Twig 模板中,我想要这样的东西:

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

预计:

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

最佳答案

您可以在 Controller 中渲染和连接 Twig 片段:

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

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

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

然后在 Twig 中:

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

否则,如果你真的想在 Twig 中这样做,你可以写一个 Custom Twig Extension它实现了一个 Twig 函数“渲染”,这样像你建议的 Twig 片段这样的东西就可以工作了:

在 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);
}
}

然后在 Twig 中:

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

注意 - 'render' 可能是 twig 的保留字,因此自定义 twig 函数可能需要不同的名称。

关于symfony twig 渲染动态 Twig 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30886834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com