如何 return 一个数组到 symfony2 中的树枝以及如何使用它?

How to return an array to twig in symfony2 and how to use it?

我已经在控制器中编写了一个动作。我想将 "results" 数组传递给一个 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>

在这段代码中我得到了这个错误: NimoProBundle:Product:product 中不存在变量 "results"。html.twig

你应该在控制器

上使用$this->render()
return $this->render('template.html.twig', array(
    'data' => $results,
));

你在 Twig 中做得很好。也不要使用这样的连接。更好地为您的模型使用 Doctrine ORM。

注:

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

Symfony\Bundle\FrameworkBundle\Controller\Controller;

这样做

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

以上 class 名称并在 class 上使用 extend

你也可以使用

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

但这不是很好的解决方案

这个讲座对你来说很好:

由于您不想在控制器中呈现任何内容:

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

在您的控制器中使用:return new JsonResponse(array('name' => $name));

然后你可以在你的 javascript 中使用 resp = JSON.parse(your_json_response); 来解码它或者只是转储到你的树枝中。或者在树枝中进行解码。

如果您想调用 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>