symfony twig 渲染动态树枝代码
symfony twig render dynamic twig code
在我的 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>
您将不得不使用 twig 核心或者可能是自定义视图渲染
检查下面的代码
$loader = new Twig_Loader_Array(array(
'index.html' => 'Hello {{ name }}!',
));
$twig = new Twig_Environment($loader);
echo $twig->render('index.html', array('name' => 'Fabien'));
在此处查看文档:http://twig.sensiolabs.org/doc/api.html#built-in-loaders
您可以在控制器中渲染和连接树枝片段:
$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>
否则,如果您真的想在 twig 中执行此操作,您可以编写一个 Custom Twig Extension 来实现 twig 函数 'render',以便像您建议的 twig 片段这样的东西可以工作:
在 twig 扩展中(您需要将其注册为服务,参见上面的 link):
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>
注意 - 'render' 可能是 twig 的保留字,因此自定义 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>
您将不得不使用 twig 核心或者可能是自定义视图渲染
检查下面的代码
$loader = new Twig_Loader_Array(array(
'index.html' => 'Hello {{ name }}!',
));
$twig = new Twig_Environment($loader);
echo $twig->render('index.html', array('name' => 'Fabien'));
在此处查看文档:http://twig.sensiolabs.org/doc/api.html#built-in-loaders
您可以在控制器中渲染和连接树枝片段:
$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>
否则,如果您真的想在 twig 中执行此操作,您可以编写一个 Custom Twig Extension 来实现 twig 函数 'render',以便像您建议的 twig 片段这样的东西可以工作:
在 twig 扩展中(您需要将其注册为服务,参见上面的 link):
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>
注意 - 'render' 可能是 twig 的保留字,因此自定义 twig 函数可能需要不同的名称。