首页 文章

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

提问于
浏览
1

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

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

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

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

这是回报:

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

这是模板内容:

{{ menu | raw }}

3 回答

  • 2

    Twig无法渲染包含树枝的字符串 . 在Twig1中没有类似 eval 函数的东西..

    你可以做的是将路径逻辑移动到PHP的东西 . router 服务可以生成URL,就像 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

  • 2

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

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

相关问题