我是Symfony的新手,我终于开始了解如何使用Doctrine查询数据库。但是,我很遗憾了解如何在Twig模板中使用数据库对象内容。
让我们说我的数据库对象包含50种不同产品的产品ID,名称,价格。在我完成查询控制器中的数据库之后,我执行以下操作,将数据库对象传递到Twig模板中:
public function searchAction($word)
{
//query database using the $word slug and prepare database object accordingly
$dataObject; // contains query results
return $this->render('GreatBundle:Default:search.html.twig', array('word' => $word));
}
这是我被困的地方。现在我有一个Twig模板,我想从控制器传递DB对象,然后在我的Twig模板中打印出数据库数据。
我很欣赏有关如何实现这一目标的任何建议。
非常感谢提前!
答案 0 :(得分:3)
我会回答一个例子(我更容易解释)
你想用slug搜索一些东西(例子中的var $ word)。假设您想找到一篇文章。
所以你的控制器:
public function searchAction($word)
{
//query database using the $word slug and prepare database object accordingly
// Search the list of articles with the slug "$word" in your model
$articleRepository = $this->getDoctrine()->getRepositoy('GreatBundle:Article');
$dataObject = $articleRepository->findBySlug($word);
// So the result is in $dataObject and to print the result in your twig, your pass the var in your template
return $this->render('GreatBundle:Default:search.html.twig', array('result' => $dataObject));
}
树枝模板'GreatBundle:默认:search.html.twig'
{% for item in result %}
{{ item.title }} : {{ item.content }}
{% endfor %}
答案 1 :(得分:0)
看看Symfony2 Book(Sf2 Book - templating)中的第二个例子,你必须使用“for”函数来解析你的对象(就像php中的数组一样!)
twig模板中的示例:
{% for item in word %}
{{ item.id }} - {{ item.name }} - {{ item.description }}{# etc... #}<br>
{% else %}
<h2>Aoutch ! No data !</h2>
{% endfor %}
啊,这不是你的渲染方法中的好变量(但这是你的例子!)
public function searchAction($word)
{
//query database using the $word slug and prepare database object accordingly
$dataObject; // contains query results
return $this->render('GreatBundle:Default:search.html.twig', array('word' => $dataObject));
}