1 pièce(s) jointe(s)
Problème de conception blocks twig (Fonctions render(controller) / fonction parent() / blocks)
Bonjour,
Je poste aujourd'hui car je me trompe sur le mécanisme de render, de blocks et de la fonction parent() de twig.
Pour vous expliquer ce que je veux faire, je vous ais fait 1 schéma et 1 speudo-code.
Le code qui pose problème est dans le fichier block2.html.twig. Je ne comprend comment le construire. Je pense que le reste est bon.
layout.html.twig
Code:
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
|
<head>
{% block css %}
...
{% endblock %}
...
</head>
<body>
...
{% block site_body %}{% endblock %}
...
{% block javascripts %}
<script>
...
</script>
...
{% endblock %}
</body> |
adaptiveView.html.twig
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
{% extends '::base.html.twig' %}
{# On remplit le block site_body #}
{% block site_body %}
{# la function fonctionBlock1Action dans le controller Machin va render block1.html.twig #}
{{ render(controller('AcmeTrucBundle:Machin:fonctionBlock1')) }}
{# la function fonctionBlock2Action dans le controller Machin va render block2.html.twig #}
{{ render(controller('AcmeTrucBundle:Machin:fonctionBlock2')) }}
{# la function fonctionBlock1Action dans le controller Machin va render block3.html.twig #}
{{ render(controller('AcmeTrucBundle:Machin:fonctionBlock3')) }}
{% endblock %} |
block2.html.twig
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
{% extends '::base.html.twig' %}
{% block javascripts %}
{{ parent() }}
{# javascripts essentielle au fonctionnement de block2 #}
...
{% endblock %}
{# code du block2 #}
{% block site_body %}
{{ parent() }}
{% endblock %} |
Pièce jointe 184676
Voici donc mes questions :
_ Comment construire le code du block2 ?
_ Il faut utiliser le la fonction parent() ? Je qu'il ne faut pas que je ré-appelle le bock site_body mais si je ne le fait pas j'ai une erreur à l'exécution car j'ai du code tout seul dans aucun block alors que je fais un extends d'un layout. Et pourtant je dois bien inclure l'ajout de code javascript ...
Suis-je clair ?
Merci d'avance,
Olivier
Peux-tu me dire si j'ai bien tout compris ?
Citation:
Envoyé par
Nico_F
Pour info, il vaut mieux éviter tous ces render() dans la template (à moins que tu n'aies vraiment pas le choix) : chaque render exécute une nouvelle requête HTTP ce qui est assez couteux en temps et en ressource.
Du coup, lorsque que je construis une page type page d'accueil personnalisé avec 6 blocks indépendants (avec une logique propre à chacun), il est préférable de mettre toute la logique dans 1 seul controller et de renvoyer d'un coup toutes les infos dont j'ai besoin, au lieu de faire 1 render/block ?
L'inconvénient, c'est que je ne peux pas appeler les différents fichiers twig que j'ai besoin en fonction de la logique de mon application (ou sinon je suis obligé de mettre de la logique dans un fichier twig, ce qui est fortement déconseillé, il me semble ...).
J'ai bien tout saisie ?
A la recherche de la solution perdue
Je suis vraiment obligé de passer par un render(controller). J'ai essayé de faire autrement sans succès.
Et pas moyen de résoudre le problème de base.
Personne ?