如何在symfony2中将数组返回到twig以及如何使用它?

时间:2015-07-08 13:58:21

标签: php symfony symfony-2.6

我在控制器中写了一个动作。我想通过"结果"数组到一个twig文件,也想通过for循环使用它。

这是我在控制器中的操作代码

public function searchBookAction(Request $request)
{
       $q="PC";
       $conn = $this->get('database_connection');
       $results = $conn->fetchAll("SELECT name FROM products where name like '%".$q."%'");
    return array('results' => $results);
}

这是我的树枝代码:       

{%for data in results%}
<li>{{ data.name|e }}</li>
{% endfor %}
</ul>

在此代码中,我收到此错误: 变量&#34;结果&#34;在NimoProBundle中不存在:产品:product.html.twig

3 个答案:

答案 0 :(得分:3)

您应该在控制器上使用$this->render()

return $this->render('template.html.twig', array(
    'data' => $results,
));
在Twig你做得很好。也不要使用这样的连接。更好地为您的模型使用Doctrine ORM。

注意:

如果你想使用渲染方法,那么你需要扩展

Symfony\Bundle\FrameworkBundle\Controller\Controller;

这样做

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

以上班级名称,并在班级上使用extend

您也可以使用

class YourController extends Symfony\Bundle\FrameworkBundle\Controller\Controller

但这不是很好的解决方案

这是一个很好的讲座:

答案 1 :(得分:1)

由于您不想在控制器中渲染任何内容:

如果数组 NOT 一个实体,那么您可以使用JsonResponse类,通过序列化将数组转换为JSON格式。

在您的控制器中使用:selected_limit

然后你可以在你的javascript中使用return new JsonResponse(array('name' => $name));对其进行解码,或者只是在你的树枝中转储。或者用树枝解码。

答案 2 :(得分:1)

如果您想通过javascript调用使用searchBookAction(正如您在评论中提到的那样),我建议您查看JsonResponse。 它的作用是将数组解析为JsonFormat。 json可以通过javascript解码而没有问题。

在您的控制器中:

public function searchBookAction(Request $request)
{
    $q="PC";
    $conn = $this->get('database_connection');
    $results = $conn->fetchAll("SELECT name FROM products where name like '%".$q."%'");
    return new JsonResponse(array('results' => $results);
}

在你的javascript代码中(我假设你使用的是jQuery而不是自己编写请求):

<script>
$.get('path/to/your/controller', {}, function(response){
    response.results  //<- here you have your results
});
</script>