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, boucle for imbriquées et accès aux variables et objets [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 25
    Points : 22
    Points
    22
    Par défaut Twig, boucle for imbriquées et accès aux variables et objets
    Bonjour,

    J'utilise le framework Symfony 2.2.

    J'ai un problème au niveau du moteur Twig et je pense à cause de l'imbrication de deux boucles for.
    En effet il semble que je perds l'ensemble du contexte dans la deuxième boucle for

    Mon code qui fonctionne :

    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
    28
    29
    30
    <ul id="main-nav" class="open-active">
    	<li class="active">
    	        <a href="{{ app.request.getBaseURL() }}/accueil"> <-- fonctionne bien
    			<i class="fa fa-dashboard"></i>
    			Tableau de bord
    		</a>
    	</li>
    	{% for obj in uiPage.getObj("userAuthorizations") %}
    		<li class="dropdown">
    			<a href="javascript:;">
    				<i class="fa fa-user"></i>
    				{{ obj.getProfile().getLabel() }}
    				<span class="caret"></span>
    			</a>
    			{% if (obj.hasFunctPoints()) %}
    				<ul class="sub-nav">
    					{% for functPoint in obj.getFunctPoints() %}
    						<li>
    							<a href="">
    								<i class="fa fa-angle-right"></i>
    							</a>
    						</li>
    						<pre>{% debug functPoint.getLabel()%}</pre> <-- fonctionne bien
    					{% endfor %}
    				</ul>
    			{% endif %}
    		</li>
    	{% endfor %}
    </ul>
    Dans ce code j'affiche en debug le retour de la propriété functPoint.getLabel() et cela fonctionne bien

    Par contre si j'essaie d'afficher la valeur de ma propriété {{ functPoint.getLabel() }} cela génère une erreur...
    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
    28
    29
    30
    31
    <ul id="main-nav" class="open-active">
    	<li class="active">
    	        <a href="{{ app.request.getBaseURL() }}/accueil"> <-- fonctionne bien
    			<i class="fa fa-dashboard"></i>
    			Tableau de bord
    		</a>
    	</li>
    	{% for obj in uiPage.getObj("userAuthorizations") %}
    		<li class="dropdown">
    			<a href="javascript:;">
    				<i class="fa fa-user"></i>
    				{{ obj.getProfile().getLabel() }}
    				<span class="caret"></span>
    			</a>
    			{% if (obj.hasFunctPoints()) %}
    				<ul class="sub-nav">
    					{% for functPoint in obj.getFunctPoints() %}
    						<li>
    							<a href="">
    								<i class="fa fa-angle-right"></i>
                                                                    {{ functPoint.getLabel() }} <-- génère une erreur
    							</a>
    						</li>
    						<pre>{% debug functPoint.getLabel()%}</pre> <-- fonctionne bien
    					{% endfor %}
    				</ul>
    			{% endif %}
    		</li>
    	{% endfor %}
    </ul>
    L'erreur n'est pas tellement parlante...
    Whoops, looks like something went wrong.
    1/1 FatalErrorException: Error: Maximum function nesting level of '64' reached, aborting! in C:\Program Files\xampp\htdocs\itmv2\vendor\twig\twig\lib\Twig\Node\Expression\GetAttr.php line 21
    Il en est de même si dans mon deuxième for j'essaie d'afficher {{ app.request.getBaseURL() }} ce qui fonctionne très bien tout en haut du code en dehors des deux boucles for imbriquées

    Si j'affiche cette même variable, app.request.getBaseURL(), dans le premier for cela fonctionne...

    C'est embêtant si je découvre que Twig ne permet pas de manipuler des objets dans un for imbriqué dans un autre for...

    Une idée ?
    Par avance merci pour votre aide.

  2. #2
    Membre à l'essai
    Inscrit en
    Février 2013
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 25
    Points : 22
    Points
    22
    Par défaut
    Je viens de trouver la solution à mon problème.

    En fait rien à voir avec le moteur Twig mais plutôt avec le debuggueur XDebug

    XDebug utilise un paramètre permettant une protection contre les récursions infinies. Cela décrit le nombre maximum de fonctions imbriquées possibles avant que XDebug sorte en erreur.
    http://xdebug.org/docs/all_settings#max_nesting_level

    Il suffit de modifier ce paramètre dans php.ini et de redémarrer le serveur Apache.

    Pour ma part j'ai doublé la valeur de 64 à 128.

    Mon code fonctionne !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Acces aux variables d'une DLL
    Par abignon dans le forum MFC
    Réponses: 1
    Dernier message: 08/09/2005, 14h29
  2. [C#] Accès aux variables Session
    Par kalan dans le forum ASP.NET
    Réponses: 9
    Dernier message: 31/08/2005, 16h40
  3. [FLASH MX2004] [AS2] Accès aux variables d'une classe
    Par stailer dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 17/07/2005, 12h58
  4. [Language]Accès aux variables
    Par Adaemon dans le forum Langage
    Réponses: 12
    Dernier message: 27/04/2005, 14h17
  5. [Syntaxe] Boucle For imbriquées en 1.5
    Par Piolet dans le forum Langage
    Réponses: 5
    Dernier message: 09/01/2005, 00h49

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