2012-08-23 10 views
0

J'utilise Symfony2 et TWIG, je veux utiliser des variables globales pour pointer vers l'index de la tablette en page:Puis-je utiliser des variables variables dans TWIG?

app/config/parameters.ini

tab_branch="1" 

app/config/config.yml

twig: 
    globals: 
     tab_branch: %tab_branch% 

src/ACME/BranchBundle/Controller/defaultController.php

/** 
* @Template() 
*/ 
public function showAction($id) { 
    ... 
    return array(
     'tab' => 'tab_branch', 
    ); 
} 

src/ACME/BranchBundle/Ressources/vues/default/show.html.twig

<input type="hidden" id="tablndex" value="{{ {{ tab }} }}" /> //not working 

Je veux vraiment faire est de faire {{ tab }} à résoudre à tab_branch, puis {{ tab_branch }} être résolu à 1 (tout comme $$foo en PHP), Comment dois-je faire?

+0

Désolé, mais cela sent juste une mauvaise odeur de code. Maintenir cela sera un cauchemar. Pourriez-vous nous en dire un peu plus sur le problème que vous essayez de résoudre? – gilden

+0

Merci pour vos conseils. Ce que je veux vraiment faire était juste de marquer l'onglet actuel. Maintenant, j'utilise querystring pour passer le tabindex entre les pages, à savoir http://www.abc.com/branch?idx=1, mais je veux vraiment jeter la chaîne de requête, pourriez-vous suggérer une autre solution? –

+0

En fonction de la complexité du site, vous pouvez soit vérifier l'itinéraire actuel dans le modèle ('{{app.request.attributes.get ('_ route') == 'FooBar'? 'foo': 'bar'}} ') ou opter pour quelque chose de plus compliqué, comme [écrire une extension twig personnalisée] (http://symfony.com/doc/current/cookbook/templating/twig_extension.html) ou en utilisant [KnpMenuBundle] (https://github.com/KnpLabs/KnpMenuBundle). – gilden

Répondre

0

Cela ne peut pas être fait de la façon dont vous essayez de le faire, twig ne fonctionne pas de cette façon. S'il n'y a pas beaucoup de valeurs possibles pour onglet, vous pouvez faire quelque chose comme:

{% if tab == 'tab_branch' %} 
    {{tab_branch}} 
{% else if tab == 'other_tab' %} 
    {{other_tab}} 
{% endif %} 

Je sais, pas très élégant ...

+0

Merci pour votre réponse, j'ai considéré cette approche, mais j'ai peur que si j'ai besoin d'ajouter plus d'onglets dans le futur, j'ai besoin de creuser dans toutes les pages pertinentes pour changer les if-logics. –

0

Ecrire une fonction personnalisée pour permettre une telle évaluation.

Vous pouvez être intéressé par cette proposition eval function

+0

Merci pour votre replay, j'ai lu le lien, mais ne peux pas voir comment le faire fonctionner, pourriez-vous me montrer un exemple de code? –

0

Je me réfère à des variables d'autres variables ne importe où dans mes données avec la syntaxe brindille:

foo: "{{ bar.baz }}/quu.txt" 
bar: 
    baz: /tmp 

Je rends jusqu'à ce que le résultat ne change pas plus:

while($template !== ($result = $twig->render($template, $data))) 
    { 
     $template = $result; 
    } 

C'est

  • inélégante: valeur de chaque variable doit être rendue avant de l'intégrer
  • insuffisante: les noms de variables ne sont pas rendus avant de l'utiliser, de sorte foo {{i}} ne fonctionnera pas
  • simple:. Je n'ai pas se référer à des filtres ou du code, juste des variables.
  • small: la mise en œuvre ci-dessus est courte et, espérons-le, claire. Peut être aussi une méthode récursive d'une ligne.
Questions connexes