El componente Templating proporciona todas las herramientas necesarias para construir cualquier tipo de sistema de plantillas.
Este proporciona una infraestructura para cargar los archivos de plantilla y opcionalmente controlar sus cambios. También proporciona una implementación del motor de plantillas concreto usando PHP con herramientas adicionales para escapar y separar plantillas en bloques y diseños.
Puedes instalar el componente de varias maneras diferentes:
La clase Symfony\Component\Templating\PhpEngine es el punto de entrada del componente. Este necesita un analizador de nombres de plantilla (Symfony\Component\Templating\TemplateNameParserInterface) para convertir un nombre de plantilla a una referencia a la plantilla y cargador de plantilla (Symfony\Component\Templating\Loader\LoaderInterface) para encontrar la plantilla asociada a una referencia:
use Symfony\Component\Templating\PhpEngine;
use Symfony\Component\Templating\TemplateNameParser;
use Symfony\Component\Templating\Loader\FilesystemLoader;
$loader = new FilesystemLoader(__DIR__ . '/views/%name%');
$view = new PhpEngine(new TemplateNameParser(), $loader);
echo $view->render('hello.php', array('firstname' => 'Fabien'));
El método render() ejecuta el archivo views/hello.php y devuelve el texto producido.
<!-- views/hello.php -->
Hello, <?php echo $firstname ?>!
La herencia de plantillas está diseñada para compartir diseños con muchas plantillas.
<!-- views/layout.php -->
<html>
<head>
<title><?php $view['slots']->output('title', 'Default title') ?></title>
</head>
<body>
<?php $view['slots']->output('_content') ?>
</body>
</html>
El método extend() es llamado en la subplantilla para definir la plantilla padre.
<!-- views/page.php -->
<?php $view->extend('layout.php') ?>
<?php $view['slots']->set('title', $page->title) ?>
<h1>
<?php echo $page->title ?>
</h1>
<p>
<?php echo $page->body ?>
</p>
Para usar la herencia de plantillas, debes registrar la clase ayudante Symfony\Component\Templating\Helper\SlotsHelper:
use Symfony\Component\Templating\Helper\SlotsHelper;
$view->set(new SlotsHelper());
// Retrieve page object
$page = ...;
echo $view->render('page.php', array('page' => $page));
Nota
Es posible la herencia multinivel: un diseño puede extender a otro.
Esta documentación todavía se está escribiendo.
Esta documentación todavía se está escribiendo.