IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Embedding controller sur navbar fait planter Symfony


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 126
    Par défaut Embedding controller sur navbar fait planter Symfony
    Bonjour à tous,

    Voilà que Symfony plante avec un magnifique "Fatal error: Allowed memory size of 536870912 bytes exhausted" lorsque j'implante un embedding dans ma navbar ...

    J'en ai pourtant un dans le footer qui lui marche parfaitement, j'ai comparé le code, je ne vois pas d'erreur...

    Le but recherché est de disposer des variables "nomEntreprise" et de l'objet "homepage" dans la navbar qui me serviront à afficher logo + nom de l'entreprise...

    Les dites variables sont aussi envoyées par le main controller pour la page d'accueil (qui sont bien affichées d'ailleurs), j'ai pensé à un conflit entre elles mais non, elles sont sensées se ré-écraser me semble t'il...

    Si je retire la route dans la fonction index du NavBarController rien ne change, de même si je mets l'embedding dans base.html.twig avant l'include de la navbar ça ne plante plus mais les variables ne sont pas trouvées ! A n'y rien comprendre !

    Merci d'avance pour votre dévouement

    NavBarController.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
     
    namespace App\Controller\Admin;
     
    use App\Repository\EntrepriseRepository;
    use App\Repository\HomepageRepository;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\Routing\Annotation\Route;
     
    class NavBarController extends AbstractController{
        #[Route('/navbar',name:'navbar')]
        public function index(EntrepriseRepository $entrepriseRepository, HomepageRepository $homepageRepository): Response
        {
     
            //Récupération des infos de l'entreprise
            $idEntreprise = $entrepriseRepository->getMaxId();
            $entreprise = $entrepriseRepository->findOneBy(['id' => $idEntreprise]);
            $nomEntreprise = $entreprise->getNomEntreprise();
     
            //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', 'nomEntreprise'));
        }
    }
    _nav.html.twig

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    <nav class="navbar">
    	{{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>{{nomEntreprise}}</p>
    		{% endif %}
    	</div>
    	<button type="button" class="menu-hamburger" aria-label="Toggle navigation" aria-expanded="false">
    		<span></span>
    		<span></span>
    		<span></span>
    	</button>
     
    	<div class="menu-navbar">
    		<div class="div-links">
    			<ul class="navbar-nav">
    				<li class="active nav-item">
    					<i class="fa-solid fa-house"></i>
    					<a href="{{path('app_index')}}" aria-label="Accueil" aria-current="page">Accueil</a>
    				</li>
    				<li class="nav-item">
    					<i class="fa-regular fa-clock"></i>
    					<a href="{{path('app_horaires_semaine_index')}}" aria-label="Horaires">Nos horaires</a>
    				</li>
    				<li class="nav-item">
    					<i class="fa-solid fa-car-side"></i>
    					<a href="{{path('app_vehicules_annonces_index')}}" arai-label="Annonces véhicules occasion">Annonces véhicules d'occasion</a>
    				</li>
    				<li class="nav-item">
    					<i class="fa-solid fa-screwdriver-wrench"></i>
    					<a href="{{path('app_services_index')}}" aria-label="Services">Nos services</a>
    				</li>
    				<li class="nav-item">
    					<i class="fa-solid fa-phone"></i>
    					<a href="">Nous contacter</a>
    				</li>
    			</ul>
    		</div>
     
    		<div class="div-connexion">
    			<ul class="navbar-nav">
    				{% if app.user %}
    					{% if is_granted("ROLE_ADMIN") or is_granted("ROLE_EMPLOYEE") %}
    						<li class="nav-item">
    							<i class="fa-solid fa-toolbox"></i>
    							<a href="{{path('app_admin_index')}}">Administration</a>
    						</li>
    					{% endif %}
    					<li class="nav-item">
    						<i class="fa-solid fa-arrow-right-from-bracket"></i>
    						<a href="{{path('app_logout')}}">Se déconnecter</a>
    					</li>
    					{% if is_granted("ROLE_USER") %}
    						<li class="nav-item">
    							<i class="fa-regular fa-id-card"></i>
    							<a href="{{path('app_utilisateurs_profil')}}">Mon profil</a>
    						</li>
    					{% endif %}
    				{% else %}
    					<li class="nav-item user-toggler">
    						<i class="fa-solid fa-user"></i>
    						<a href="#" aria-label="Page de connexion" alt="Icône utilisateur"></a>
    					</li>
    					<li class="nav-item connexions">
    						<i class="fa-solid fa-arrow-right-to-bracket"></i>
    						<a href="{{path('app_login')}}">Se connecter</a>
    					</li>
    					<li class="nav-item connexions">
    						<i class="fa-regular fa-address-card"></i>
    						<a href="{{path('app_register')}}">S'inscrire</a>
    					</li>
    				{% endif %}
    			</ul>
    		</div>
    	</div>
    </nav>

    base.html.twig

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <!DOCTYPE html>
    <html lang="fr">
    	<head>
    		<meta charset="UTF-8">
    		<meta name="viewport" content="width=device-width, initial-scale=1">
    		<title>
    			{% block title %}Bienvenue !
    			{% endblock %}
    		</title>
     
    		{% block stylesheets %}
    			{{ encore_entry_link_tags('app') }}
    			<link rel="stylesheet" href={{asset('./css/styles.css')}}>
    			<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    			<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css">
    		{% endblock %}
    	</head>
    	<body>
     
    		{{ include('/_partials/_nav.html.twig') }}
     
    		{% if app.user and app.user.isVerified == false %}
    			<div class="alert alert-warning alert-dismissible" role="alert">
    				<button type="button" class="btn-close" data-dismiss="alert" aria-label="Close">&times;</button>
    				<div class="alert-message">
    					<strong>Votre compte n'est pas encore activé</strong>
    					,
    					<a href="{{path('resend_verif')}}">Cliquez ici pour renvoyer le lien d'activation</a>
    				</div>
    			</div>
    		{% endif %}
    		{% include("/_partials/_flash.html.twig") %}
    		{% include("/_partials/_modal.html.twig") %}
    		{% block body %}{% endblock %}
    		{{ include('_partials/_footer.html.twig') }}
    		{{ include('_partials/_cookies.html.twig') }}
     
    		{% block javascripts %}
    			<script type="text/javascript" src="{{asset('assets/js/main.js')}}" defer></script>
    		{% endblock %}
    	</body>
    </html>

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Par défaut
    Bonjour,

    Je vois dans ton controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return $this->render('_partials/_nav.html.twig', compact('homepage', 'nomEntreprise'));
    Tu passes 2 chaînes en dur dans ce compact, ce qui m'intrigue... Peut être que ton code est correct, j'utilise rarement cette fonction "compact", mais peux tu essayer pour passer tes variables à la vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    return $this->render('_partials/_nav.html.twig', array(
        'homepage' => $homepage,
        'nomEntreprise' => $nomEntreprise
    ));
    Qu'est ce que ça donne ?

    EDIT : Oups, j'ai posté un peu vite, je viens de regarder la doc de "compact", ton code semble correct !

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 126
    Par défaut
    Oui, la méthode compact est bien pratique lorsqu'il s'agît de passer uniquement des variables par le controller...

    Pour en revenir au problème, non seulement ça plante Symfony mais aussi le navigateur et vs code, obligé de tout redémarrer à chaque fois !

    C'est rageant en plus car je ne pense pas avoir fait d'erreur d'orthographe/syntaxe...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Par défaut
    Désolé pour la fausse piste, merci pour la fonction compact, je la garde sous le coude pour mes besoins...

    Ton message parle de "memory", quelle limite de mémoire as tu pour les scripts PHP dans ton serveur ?
    Moi j'ai 512 Mo et je n'ai jamais eu de souci...

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 126
    Par défaut
    Pareil que toi ...

    J'ai l'impression que ça se produit car la variable est déclarée dans 2 controllers à la fois, mais c'est bizarre...

  6. #6
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 432
    Par défaut
    Bonjour,

    A la ligne 2 du fichier _nav.html.twig, pourquoi est-ce que tu utilises les fonctions twig render/controller pour afficher le rendu de NavBarController::index ?

    La méthode NavBarController::index affiche le template _nav.html.twig, or ce template appelle la méthode du contrôleur à la ligne 2, tu sembles donc avoir une boucle infinie à l'affichage.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/01/2016, 12h20
  2. [WD15] Etat sur table fait planter windev
    Par Jeje9 dans le forum WinDev
    Réponses: 2
    Dernier message: 09/06/2015, 10h47
  3. Réponses: 7
    Dernier message: 12/11/2008, 10h09
  4. Un TextBox dans un Control ActiveX fait planter VB6
    Par nicolashenry974 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 21/07/2006, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo