Au lieu de faire ce rendu de chaque diapositive dans mon TWIG comme ceci (voir ligne 6):
{# loop out the slides #}
{% for c in contents %}
{% set i=i+1 %} {# increase slide number #}
<div id="slide{{ i }}" class="slide" style="z-index:{{ i }};">
{# the slide itself, rendered by it's own template #}
{% include 'BizTVArchiveBundle:ContentTemplate:'~c.template~'/view.html.twig' with {'contents': c, 'ordernumber': i} %}
</div>
{% endfor %}
... Au lieu de cela, je voudrais garder toute cette logique dans le contrôleur, pour simplement fournir à la vue un tableau de diapositives prêtes. Comment puis-je faire quelque chose comme ça (voir ligne 9):
//do stuff...
foreach ($container->getContent() as $c) {
$content[$i]['title'] = $c->getTitle();
$content[$i]['sort'] = $c->getSortOrder();
$content[$i]['data'] = $c->getData();
$content[$i]['template'] = $c->getTemplate()->getId();
$content[$i]['duration'] = $this->extract_seconds($c);
$content[$i]['html'] = $this->render('BizTVArchiveBundle:ContentTemplate:'.$content[$i]['template'].'/view.html.twig', array(
'contents'=> $content[$i],
'ordernumber' => 99,
));
}
Tout ce que cela me donne pour le moment (le contenu de $ content [$ i] ['html']) est
{"headers":{}}
Il est préférable que vous incluez le modèle dans le modèle , de cette façon, vous conservez le rendu des modèles dans la couche de vue et la logique dans la couche de contrôleur.
Mais bon, si tu le veux vraiment ...
Pour ce faire, vous pouvez utiliser 2 services: twig
utilise le Twig_Environment
ou templating.engine.twig
qui est une couche de modèles construite dans Symfony2 pour Twig, cela peut être facilement commuté ot templating.engine.php
.
Si vous utilisez le service twig
, vous pouvez voir le twig docs sur la façon de l'utiliser:
$template = $this->get('twig')->render('/full/path/to/Resources/views/'.$content[$i]['template'].'/view.html.twig', array(...));
Si vous utilisez le templating.engine.twig
service, voir les modèles de documentation sur la façon de l'utiliser, qui est presque exactement le même que le Twig_Environment
.
Vous pouvez obtenir un objet rendu sous forme de contenu comme ceci:
$this->render('BizTVArchiveBundle:ContentTemplate:Some.html.twig', array())->getContent();
Dans un modèle twig, vous pouvez définir la valeur d'une variable imprimée comme ceci:
{% set rendered %}
{{ var_to_print }}
{% endset %}
En effet, $this->render()
renvoie un objet Response
. Au lieu de $this->render()
, utilisez $this->renderView()
.