【问题标题】:Print a variable that contains html and twig on a twig template在 twig 模板上打印包含 html 和 twig 的变量
【发布时间】:2013-11-25 17:35:04
【问题描述】:

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

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

我需要浏览器获取代码 html 和此时此刻的 twig 部分是 "{{ 路径(~~~~~) }}"

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

这是你的回报:

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

这是模板内容:

{{ menu | raw }}

【问题讨论】:

  • 为什么要混合使用 twig 和 php 模板?您应该选择其中之一。

标签: php html symfony twig


【解决方案1】:

Twig 无法呈现包含 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 模板。

    【讨论】:

      【解决方案3】:

      检查此捆绑包: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)
      ));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-06
        • 1970-01-01
        • 2012-12-25
        • 2019-03-31
        • 2012-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多