简体   繁体   中英

symfony2 -How to retrieve data from database globally in every page

I want to retrieve Cities names from a table in the database and put them as options in a select input (combobox) which is defined in 'layout.html.twig' . All my views extends 'layout.html.twig', so how can I access to cities names in every page?

[Solution]

I'm not able to respond to my topic ,I didn't have much reputation so I edit my topic

I have found the solution, using "embedding controllers"

  • first I've created an action to retreive all cities names:

     public function listCitiesAction(){ // retreiving cities $entities = $this->getDoctrine()->getRepository("MedAdBundle:City")->findAll(); return $this->render('MedAdBundle:Ville:list_cities.html.twig', array('entities' => $entities)); } 
  • this action render list_cities.html.twig defined as :

     <select class="form-control"> {% for entity in entities %} <option>{{ entity.name}}</option> {% endfor %} </select> 
  • finnaly I edit my layout.html.twig

     <div> {{ render(controller('MedAdBundle:City:listCities'))}} </div> 

In this way I can access to cities combobox in every page in my app ;)

Another nice way would be use render .

This allows you to call a controller out of your layout.html.twig

{{ render(controller("AcmeDemoBundle:Helper:citySelector")) }}

you also can cache the output with ESI .

I would go with these steps:

  • Write a form hosting a symfony entity field configured to work with the Cities table
  • Define this form as a service in the DIC
  • Define a twig extension that exposes a function to output the form HTML
  • Use the twig function in the layout.html.twig that is extended by all the other templates

As an optimization I would look how I could wire Doctrine with some caching system (eg memcached) to avoid hitting the database on each page load.

This is where you can find documentation about the entity field: http://symfony.com/doc/current/reference/forms/types/entity.html

Use the Symfony documentation to find how to define a form as a service and how to write your own twig extension.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM