在树枝模板上打印包含html和twig的变量

时间:2013-11-25 17:35:05

标签: php html symfony twig

我有一个变量,假设是: $ menustr;这个变量包含代码html和一些树枝部分,例如:

$menustr .= '<li><a href="{{ path("'. $actual['direccion']  .'") }}" >'. $actual['nombre'] .'</a></li>';

我需要浏览器使用代码html和这个momen中的twig部分 “{{path(~~~~~)}}”

我发送一个名为“$ menustr”的变量并在使用html代码的表达式“raw”之后返回,但这不会使twig代码生效。

这是回归:

return $this->render('::menu.html.twig', array('menu' => $menustr));

这是模板内容:

{{ menu | raw }}

3 个答案:

答案 0 :(得分:2)

Twig无法渲染包含树枝的字符串。在Twig 1中没有像eval函数那样的东西。

你可以做的是将路径逻辑移动到PHP的东西。 router服务可以生成网址,就像path twig函数一样。如果您位于扩展基座Controller的控制器中,则只需使用generateUrl

$menuString .= '<li><a href="'.$this->generateUrl($actual['direction'].'">'. $actual['nombre'] .'</a></li>';

return $this->render('::menu.html.twig', array(
    'menu' => $menuString,
));

此外,在Symfony中使用菜单时,我建议您查看KnpMenuBundle。


编辑: 1。正如@PepaMartinec指出的那样,有一个函数可以做到这一点,它被称为template_from_string

答案 1 :(得分:2)

您可以使用template_from_string函数渲染存储在变量中的Twig模板。

答案 2 :(得分:0)

检查此捆绑包:https://github.com/LaKrue/TwigstringBundle 这个Bundle增加了使用Symfony2原生Twig模板引擎呈现字符串而不是文件的可能性:

$vars = array('var'=>'x');
// render example string
$vars['test'] = $this->get('twigstring')->render('v {{ var }} {% if var is defined %} y {% endif %} z', $vars);
// output
v x y z

在你的情况下我会:

return $this->render('::menu.html.twig', array(
    'menu' => $this->get('twigstring')->render($menustr, $vars)
));