8 - Intégrer les données dans les vues (Symfony 6)

Catégories : Symfony

Série : Symfony 6

Fichiers : https://github.com/NouvelleTechno/e-commerce-Symfony-6

Mots-clés : Symfony donnees controleurs symfony6 vues

939 lectures

Auteur : user Benoit

Date :

Partager

Partager sur Facebook Partager sur Twitter Partager sur LinkedIn

Dans cette 8ème vidéo de la série Symfony 6, nous abordons l'intégration de données dans les vues de notre projet.

Pour commencer, nous allons modifier notre entité “Categories” afin d'y ajouter une propriété permettant de les ordonner comme bon nous semble.

Nous allons donc ajouter les lignes suivantes dans le fichier “src/Entity/Categories.php

    #[ORM\Column(type: 'integer')]
    private $categoryOrder;
    //...

    public function getCategoryOrder(): ?int
    {
        return $this->categoryOrder;
    }

    public function setCategoryOrder(int $categoryOrder): self
    {
        $this->categoryOrder = $categoryOrder;

        return $this;
    }

Si nous souhaitons afficher la liste des catégories dans notre page d'accueil, nous aurons besoin de les sélectionner au moyen de la méthode findBy fournie par notre repository.

Nous pourrons donc les récupérer et les trier comme ceci

$categoriesRepository->findBy([], ['categoryOrder' => 'asc'])

Afin d'accéder à CategoriesRepository, nous utiliserons l'injection de dépendances dans notre méthode index de MainController, puis nous passons nos catégories en paramètre du render de notre vue twig.

    #[Route('/', name: 'main')]
    public function index(CategoriesRepository $categoriesRepository): Response
    {
        return $this->render('main/index.html.twig', [
            'categories' => $categoriesRepository->findBy([], ['categoryOrder' => 'asc'])
        ]);
    }

Nous aurons accès à une variable categories dans le fichier templates/main/index.html.twig. Nous pouvons boucler sur cette variable et accéder à ses différentes propriétés, par exemple en écrivant

{% for category in categories %}
	<h2>{{ category.name }}</h2>
{% endfor %}

Nous pourrons mettre en forme et ajouter des liens et conditions comme suit

            {% for category in categories %}
                {% if category.parent == null %}
                    <div class="col-12">
                        <h2>{{ category.name }}</h2>
                    </div>
                {% else %}
                    <div class="col-4">
                        <div class="card h-100">
                            <div class="card-body">
                                <h3 class="card-title">{{ category.name }}</h3>
                                <a href="{{ path('categories_list', {slug: category.slug}) }}" class="btn btn-primary">Voir les produits</a>
                            </div>
                        </div>
                    </div>    
                {% endif %}
            {% endfor %}

Vous trouverez plus de détails dans la vidéo ci-dessus.

Obtenir de l'aide

Pour obtenir de l'aide, vous pouvez accéder au serveur Guilded pour une entraide par chat.