我有一个变量,假设是: $ 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 }}
答案 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)
));