Using doctrine database object in a template

2019-06-08 20:38发布

I am new to Symfony and am finally beginning to understand how to query a database using a Doctrine. However, I am lost as far understanding how to use the database object content in a Twig template.

Lets say my database object contains product Id's, names, prices, for 50 different products. After I am done querying the database in the controller, I do the following, to pass the database object into the Twig template:

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));
}

This is where I am stuck. Now I have a Twig template, I would like to pass the DB object from the controller and then print out the database data in my Twig template.

I appreciate any suggestions as to how I can accomplish this.

Many thanks in advance!

2条回答
疯言疯语
2楼-- · 2019-06-08 20:44

Just look the second example in the Symfony2 Book (Sf2 Book - templating), you have to use the function "for" to parse your object (like an array in php !)

Example in your twig template :

{% for item in word %}
   {{ item.id }} - {{ item.name }} - {{ item.description }}{# etc... #}<br>
{% else %}
<h2>Aoutch ! No data !</h2>
{% endfor %}

Ah, and it's not the good var in your render method (but it's was for your example !)

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));
}
查看更多
做个烂人
3楼-- · 2019-06-08 21:03

I'll respond with an example (more easier for me to explain)

You want to search something with a slug (the var $word in your example). Let's say you want to find a article with that.

So your controller :

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));
}

The twig template 'GreatBundle:Default:search.html.twig'

{% for item in result %}
{{ item.title }} : {{ item.content }}
{% endfor %}
查看更多
登录 后发表回答