Home » Php » php – symfony2 -How to retrieve data from database globally in every page

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

Posted by: admin July 12, 2020 Leave a comment

Questions:

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 😉

How to&Answers:

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.

Answer:

It’s well explained in the cookbook.

http://symfony.com/doc/current/cookbook/templating/global_variables.html

Answer:

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 (e.g. 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.