Bonjour à tous,

Dans le but de disposer de 2 petites variables dans ma navbar, j'ai procédé à l'implantation d'un render de controller (embedding) cependant impossible de le faire marcher alors que j'ai utilisé la même procédure dans mon footer et que cela marche parfaitement... Je lis dans les forum que l'embedding est à éviter mais alors quelle alternative avons nous pour récupérer 2 variables dans la navbar ?

J'ai tout essayé ... une erreur Allocation max memory apparaît et fait planter Symfony + serveur + navigateur...
Ladite navbar est un _partial incrusté dans mon base.html.twig

Les deux variables sont des strings permettant d'afficher logo et nom d'entreprise dans la navbar... bref totalement basique...

`` {{ render(controller('App\Controller\Admin\NavBarController::index')) }}

<div class="brand">
    {% if homepage.logo is not null%}
        <a href="#" class="navbar-brand" aria-label="Logo"><img src="{{asset('assets/uploads/logo/' ~ homepage.logo)}}" alt="Logo entreprise" style="height:50px;"></a>
    {% else %}
        <span class="logo">
            <i class="fa-solid fa-truck-pickup"></i>
        </span>
        <p>{{entreprise.nomEntreprise}}</p>
    {% endif %}
</div> ``

Je précise que si je mets ce code dans mon footer cela marche parfaitement ! donc, qu'est-ce qui pourrait clocher dans la navbar ?

Merci d'avance pour votre aimable réponse.

NavbarController.php :

```

namespace App\Controller\Admin;

use App\Repository\EntrepriseRepository;
use App\Repository\HomepageRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;

class NavBarController extends AbstractController{

public function index(EntrepriseRepository $entrepriseRepository, HomepageRepository $homepageRepository): Response
{
    //Récupération des infos de l'entreprise
    $idEntreprise = $entrepriseRepository->getMaxId();
    $entreprise = $entrepriseRepository->findOneBy(['id' => $idEntreprise]); 

    //Récupération des infos de page d'accueil
    $idHomepage = $homepageRepository->getMaxId();
    $homepage = $homepageRepository->findOneBy(['id' => $idHomepage]);

    return $this->render('_partials/_nav.html.twig', compact('homepage', 'entreprise'));
}

} ```

5 réponses


salut !
je n'ai pas trop compris la finalité.

Mais si tu souhaites ajouter des variables répétable un peu partout.
regardé le fichier de config twig.yml.

Au sein de ce fichier tu vas pouvoir y importer une variable utilisable sur l'ensemble de ton projet.
Et ensuite include le fichier sur les pages souhaitaient sans avoir à importer à chaque fois la variable depuis ton controller

Bonjour,

Il faut que les variables soient lues car leur valeur peut changer, elles ne peuvent être statiques, raison pour laquelle l'embedding semble l'idéal...

Tu peux ajouter des fonctions à twig, fonctions qui peuvent de permettre de récupérer des varialbes dont tu as besoin.Tu pourrais ensuites faire

{% set stats_homepage = ta_fonction() %}

Merci Grafikart pour ta réponse, je vais essayer çà...
C'est quand même dommage de ne pouvoir utiliser l'embedding surtout que j'ai fait la même chose dans mon footer et ça marche parfaitement...
C'est vraiment un problème d'allocation de mémoire d'après certains forums et ils préconisent de ne plus s'en servir...

Cependant, étant en version 6.2 , si je faisais l'update en 6.3 peut être ce problème serait réglé ?

Perso je ne l'utilise pas du coup je saurais pas de te dire. Mais clairement en terme de performance, vu que ça doit rerendre via twig c'est pas optimal :(