如何 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>
我已经在控制器中编写了一个动作。我想将 "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>