Twig - Loop只返回1个结果

时间:2015-04-14 19:30:17

标签: php loops while-loop twig

我试图在使用twig并在此循环内部时使用php进行循环, 我正在创建一个包含数据库查询记录的参数。

问题在于,当我在HTML文件中使用参数时,它只返回while循环中的1条记录,即使有3或4条甚至更多...

这是我的PHP代码:

public function getWidgetsByName($name)
{
     global $params;
     $get = $this->db->query("SELECT * FROM profile_items
                              WHERE category = 'widget'
                              AND username = '". $name ."'");
     if($get)
     {
          while($key = $get->fetch())
          {
               $params["profile_widget_name"] = $key['name'];
          }
     }
}

这是我的HTML树枝渲染文件中的HTML参数:

{{ profile_widget_name }}

参数只是渲染它们应该如何渲染:

echo $twig->render('app/views/'. $_REQUEST['p'] .'.html', $params);

是的$ params变量是一个数组,在配置文件中它首先被用作$ params = array(" ..." =>" ...& #34);我通过$ params [" ..."] =" ...";

将数据添加到此数组中

所以,我希望有人可以帮助我。

提前致谢, 最诚挚的问候。

1 个答案:

答案 0 :(得分:1)

目前,$params["profile_widget_name"]的值只是一个字符串。每次执行while循环时,都会使用当前值覆盖键的先前值。

因此,当您将$params传递给Twig时,profile_widget_name的值是要选择的数据库的最后一行中name的值。

我认为你想要的是profile_widget_name的值是一个数组。然后,每次进行循环时,name的当前值都会添加到数组中,而不是覆盖它。

您可以通过以下方式执行此操作:

$params["profile_widget_names"][] = $key['name'];

现在,在您的Twig模板中,您需要执行以下操作:

{% for profile_widget_name in profile_widget_names %}
  {{ profile_widget_name }}
{% endfor %}

使用多个参数

如果你想要多个参数,你可以这样做:

$params["profile_widgets"][] = [
    'pos_x' => $key['pos_x'],
    'name'  => $key['name'],
];

在Twig中:

{% for profile_widget in profile_widgets %}
  Name: {{ profile_widget.name }}
  Pos X: {{ profile_widget.pos_x }}
{% endfor %}