我在控制器中写了一个动作。我想通过"结果"数组到一个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
答案 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>