Twig rendre vs comprennent - Quand et où utiliser l'un ou l'autre?
J'ai lu Rameau: rendre vs inclure mais ce n'est pas ce que je cherche. Je ne suis pas sûr de savoir où et quand dois-je utiliser le rendu, et quand dois-je comprendre, que le comportement de ces expressions semble très semblable à moi.
Qu'est-ce que les différences fondamentales entre ces deux expressions ?
Entendez-vous le
Je veux Dire
return $this->render('MyBundle::index.html.twig');
dans votre contrôleur et le {% include MyBundle::index.html.twig %}
dans un modèle?Je veux Dire
{% render %}
ou {% include %}
à la fois dans un template twigOriginalL'auteur 0x1gene | 2013-04-30
Vous devez vous connecter pour publier un commentaire.
Il existe de grandes différences entre
{% render %}
et{% include %}
.{% render %}
balise appelle une action : lorsque vous faites cela, vous êtes l'exécution d'un contrôleur, la création d'un nouveau contexte à l'intérieur de ce contrôleur et rend une vue qui sera ajouté à votre vue actuelle.{% include %}
balise comprend un autre fichier twig dans l'actuel : il n'y a pas d'action, de façon à ce que la fichier inclus permettra d'utiliser votre contexte actuel (ou le contexte vous donner comme paramètre) pour rendre la vue.Nous allons voir que dans les détails.
Un {% render %} exemple
Render est une balise qui appelle une action de la même façon que si vous étiez en appelant à l'aide d'un itinéraire, mais en interne, sans HTTP transactions. Personnellement, je suis en utilisant
{% render %}
lorsque le contenu de mon point de vue, doivent être actualisés à l'aide d'ajax. De cette façon, je suis en mesure d'appeler la même action à l'aide du routage standard quand il y a des interactions à l'intérieur de ma page.Envisager une simple page avec ajax formulaire qui vous permet d'ajouter des animaux, et de la dynamique d'une actualisation de la table des aliments.
Les Trucs entité
Les Trucs forme
Le routage.fichier yml
Les contrôleurs de
L'index.html.twig
La listStuffs.html.twig
{# listStuf
Cela va vous donner quelques laid forme ressemblant à ceci :
Le point est : si vous actualisez votre page ou si vous ajoutez/supprimez des animaux, le même contrôleur sera appelée. Pas besoin de créer une certaine complexité de la logique ou de dupliquer du code.
Un { % % } exemple
La
[% include %}
tag vous permettent d'inclure un morceau de rameau code de la même façon que leinclude
instruction fonctionne en PHP. Ce que cela signifie en gros :{% include %}
vous donne une façon de réutiliser certains générique morceau de code partout dans votre application.Nous restons avec notre fourre exemple : garder StuffEntity et StuffData mais de remplacer le suivant :
De routage :
Contrôleurs :
index.html.rameau :
genericTable :
Comme vous pouvez le voir ici, il y a un seul contrôleur d'initialiser l'ensemble des éléments de la page (le formulaire et la table), ce n'est donc pas possible de faire des transactions asynchrones. Mais, vous pouvez inclure cette genericTable.html.twig fichier n'importe où dans votre application.
Conclusion
Vous allez utiliser
{% render %}
lorsque la vue à insérer peut être actualisée à l'aide d'une route standard ou lorsque la vue à insérer est totalement indépendante du contexte actuel.Vous allez utiliser
{% include %}
lorsque vous devez utiliser un morceau de rameau code plusieurs fois dans votre application, mais vous devez initialiser la inclus affichage obligatoire du contexte dans la même action que le parent twig fichier.Je ne savais pas à propos de la
{% render %}
balise dans twig. Pouvez-vous m'indiquer un docu d'entrée ou de quelques échantillons? Il semble vraiment intéressantHmm, il semble ne pas documenté beaucoup, ont un look à l'ancienne Symfony2 doc, et la recherche de
Embedding Controllers
.Merci! Il n'y a vraiment pas beaucoup documenté à ce sujet. Mais je pense que cela pourrait venir à la main de temps en temps. +1 😀
Grande et claire explication, et toujours d'actualité, merci Alain!
OriginalL'auteur Alain Tiemblo