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 :

twig et render - Ne trouve pas la variable


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 41
    Par défaut twig et render - Ne trouve pas la variable
    Bonjour,

    J'ai un petit souci sous symfony 2 + twig, je ne parviens pas à transmettre une variable à twig, via mon controleur.

    Code du contrôleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	/**
    	 * Renvoie la liste des onglets (tabs)
    	 * @return array Liste des onglets
    	 */
    	public function getTabsNamesAction() {
    		$tabsNames = array('hop', 'hap', 'hup', 'hep', 'hip');
    		return $this->render('MyNewBundle:Front/FrontHtmlStructure/TabsStructure:DivTabsContainer.html.twig', array('tabsNames' => $tabsNames));
    	}
    Code du template DivTabsContainer.html.twig :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div class="tabs">
    	<ul class="cf onglets">
    	{% for tabName in tabsNames %}
    		<li>{{ tabName }}</li>
    	{% endfor %}
    	</ul>
    </div>
    Erreur renvoyée par le framewok :
    Variable "tabsNames" does not exist in MyNewBundle::/Front/FrontHtmlStructure/TabsStructure/DivTabsContainer.html.twig at line 3
    j'ai cherché partout, j'ai l'impression d'être le seul à avoir ce problème, donc c'est probablement une erreur de ma part.
    Le contrôleur est bien chargé, et le template également.

    Si jamais vous voyez le problème, je planche dessus depuis presque deux heures, et là j'avoue je sèche ...

    note - je me suis basé sur cette documentation :
    http://symfony.com/doc/current/book/...ng-controllers

    Merci beaucoup de votre aide !

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Par défaut
    fais simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% for tabsNames in tabsNames %}

    et fais gaffe sur Twig $tabsName est un tableau

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 41
    Par défaut
    Je ne comprends pas très bien ta réponse, mon retour étant tabsNames (le nom de la variable), je peux renommer chaque résultat tabName dans Twig non ?

    Néanmoins, j'ai copié / collé ton code pour voir, et ça ne fonctionne pas mieux, il me fait toujours la même erreur ...

    Edit:
    en fait avec copie de ton code, il me fait la même erreur sur la variable tabName ligne 5, que je corrige en tabsNames, et il me refait la même erreur qu'au début ligne 3 ...

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Par défaut
    Depuis le controller tu as passer 'tabsNames' vers la vue.
    faut changer : {{ tabName }} en {{ tabsNames }} essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {% for tabsNames in tabsNames %}
    		<li>{{ tabsNames }}</li>
    	{% endfor %}
    aprés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <li>{{ tabsNames.hop }}</li>
    Tu comprendra !!

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 41
    Par défaut
    Je viens de faire ton test en copier coller, même erreur. Du coup je check la doc, dans laquelle il est écrit ceci exactement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return $this->render('AcmeArticleBundle:Article:recentList.html.twig', array('articles' => $articles));
    - articles est au pluriel, c'est le tableau en php.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {% for article in articles %}
            {% include 'AcmeArticleBundle:Article:articleDetails.html.twig' with {'article': article} %}
        {% endfor %}
    - article au singulier correspond dans le template à une seule occurence de articles ($articles)

    A priori, si j'ai bien lu la doc, je me suis vraiment basé sur la méthode de travail conseillée. Ce qui me paraît gênant dans ton exemple (que j'ai testé tout de même), c'est l'appel à une récursive, du coup, vu qu'on modifie tabsNames dès le premier tour de boucle, j'ai l'impression que ça peut pas fonctionner ... Après c'est peut être particulier sous Twig, j'en sais rien.

    Merci de ton aide, mais désolé, ta solution me renvoie exactement la même erreur.

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Par défaut
    détrompes toi !! Moi je fais tjrs for titi in titi pas de "s" pour le dernier et je n'ai jamais eu de soucis par ce que faudrait utiliser {{ titi }} meme chose par tout et c'est + facile.

    Et je viens d'essayer ton code, j'ai déclarer le tableau $tabsNames dans mon controlleur je passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'tabsNames' => $tabsNames
    ca marche dans ma vue :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     {% for tabsNames in tabsNames %}
    		<li>{{ tabsNames }}</li>
    	{% endfor %}

  7. #7
    Membre éprouvé Avatar de Avrel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Par défaut
    Citation Envoyé par aitiahcene Voir le message
    fais simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% for tabsNames in tabsNames %}
    Surtout écoute pas ça , c'est de la connerie, il faut que tu différencie ton tableau de l'entrée sur laquelle tu te trouve, le code que tu as mis précédemment est correct et c'est la manière dont il faut procéder.

    Concernant ton erreur je vais me pencher dessus.

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Par défaut
    peut importe la façon de le faire : la doc suggère de le faire comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% for entity in entities %}
    Mais moi je ne fais pas le "s" a la fin

    Franchement lui au début il a fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {% for tabName in tabsNames %}
    		<li>{{ tabName }}</li>
    	{% endfor %}
    c'est complètement faux !

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 41
    Par défaut
    Bonjour,

    Merci pour le coup de main. J'ai fini par identifier mon erreur, j'étendais un des templates parents, qui faisait un render de la même méthode.

    C'était bien une erreur humaine, du coup j'ai réglé ça en changeant légèrement l'architecture de mes templates.

    Concernant la syntaxe utilisée dans la boucle, effectivement j'aurais tendance à penser que symfony ne proposerait pas de faire ce genre de pratiques, car même si ça fonctionne, le jour ou ça déconne, bon courage pour le debuggage.

    Aitiahcene, la syntaxe que j'ai mise en place au départ est celle que j'ai reprise à la fin dans mon projet, et qui fonctionne actuellement ...

    doc : (articles as array)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% for article in articles %}
    mon projet : (tabsNames as array)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% for tabName in tabsNames %}
    J'espère que ça te servira aussi ; )

    Merci de votre aide à tous les deux.

  10. #10
    Membre éprouvé Avatar de Avrel
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2010
    Messages : 118
    Par défaut
    Citation Envoyé par aitiahcene Voir le message
    peut importe la façon de le faire : la doc suggère de le faire comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {% for entity in entities %}
    Mais moi je ne fais pas le "s" a la fin

    Franchement lui au début il a fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {% for tabName in tabsNames %}
    		<li>{{ tabName }}</li>
    	{% endfor %}
    c'est complètement faux !
    C'est absolument pas faux.

    Tu te trouve dans une boucle foreach, c'est a dire qu'à chaque occurrence de ton tableau tabsname, sa valeur sera inséré dans une variable tabname, et donc tu y accède bien avec tabname.

    Je te conseille sincèrement d’améliorer tes compétences dans le domaine du php et des langages de programmation en général avant de venir avancer des énormités telles que celle là à des gens qui ne sont pas forcement plus compétant que toi et en les lançant sur une mauvaise voie.
    Et comme j'aime aider mon prochain, je t'envoie lire ça :
    http://php.net/manual/fr/control-structures.foreach.php

  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Par défaut
    Citation Envoyé par Avrel Voir le message
    Je te conseille sincèrement d’améliorer tes compétences dans le domaine du php et des langages de programmation en général avant de venir avancer des énormités telles que celle là à des gens qui ne sont pas forcement plus compétant que toi et en les lançant sur une mauvaise voie.
    Et comme j'aime aider mon prochain, je t'envoie lire ça :
    http://php.net/manual/fr/control-structures.foreach.php
    Merci #Avrel pour ton conseil et pour le lien

Discussions similaires

  1. Il ne trouve pas ma variable
    Par theo16 dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 23/02/2014, 15h42
  2. verif, si la variable ne se trouve pas dans la bdd
    Par artichaudd dans le forum Langage
    Réponses: 2
    Dernier message: 15/02/2012, 13h51
  3. [MySQL] Update SQL qui ne trouve pas mes variables
    Par Actraiser dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 02/06/2011, 00h26
  4. [Kylix] [cgi] ne trouve pas libsqlmy.so.1 !
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 04/07/2002, 15h15

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