escape array php symfony twig render

php - array - twig table



¿Cómo representar la salida TWIG a una variable para su uso posterior(symfony2)? (4)

Dentro de una plantilla de ramita, puede establecer el valor de una variable impresa así:

{% set rendered %} {{ var_to_print }} {% endset %}

En lugar de hacer esta representación de cada diapositiva en mi TWIG de esta manera (vea la línea 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 %}

... En lugar de eso, me gustaría mantener toda esa lógica en el controlador, solo para enviar a la vista una serie de diapositivas listas. ¿Cómo puedo hacer algo como esto (ver línea 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, )); }

Todo lo que me da en este momento (el contenido de $ content [$ i] [''html'']) es

{"headers":{}}


Es mejor si incluye la plantilla en la plantilla , de esta manera mantendrá la representación de plantillas en la capa de vista y la lógica en la capa del controlador.

Pero bueno, si realmente lo quieres ...

Puedes usar 2 servicios para hacer eso: Twig_Environment usa Twig_Environment o Twig_Environment que es una capa de plantilla de creación en Symfony2 para Twig, esto puede cambiarse fácilmente de templating.engine.php .

Si usas el servicio de twig , puedes ver los documentos de la ramita sobre cómo usarlo:

$template = $this->get(''twig'')->render(''/full/path/to/Resources/views/''.$content[$i][''template''].''/view.html.twig'', array(...));

Si usa el servicio templating.engine.twig , consulte los documentos de plantillas sobre cómo usarlo, que es casi exactamente el mismo que Twig_Environment .


Esto se debe a que $this->render() devuelve un objeto de Response . En lugar de $this->render() , usa $this->renderView() .


Puedes obtener contenido de un objeto renderizado como este:

$this->render(''BizTVArchiveBundle:ContentTemplate:Some.html.twig'', array())->getContent();