Ver índice de contenidos del libro

4.6. Slots

Por el momento, el título de toda las páginas de la aplicación es el mismo y se define en la etiqueta <title> del layout:

<title>Jobeet - Your best job board</title>

Aunque se trata de un título correcto, en algunas páginas como la de detalle de una oferta de trabajo es mucho más útil mostrar información como el nombre de la empresa y el puesto de trabajo. En Symfony, cuando una zona del layout depende de la plantilla, tienes que utilizar slots:

Funcionamiento básico de los slots

Figura 4.7 Funcionamiento básico de los slots

Añade el siguiente código al layout para que el título de la página sea dinámico:

// apps/frontend/templates/layout.php
<title><?php include_slot('title') ?></title>

Los slots se definen con un nombre único (en este caso, title) y se muestran con el helper include_slot(). Después de incluir el slot en el layout, ahora tienes que utilizar el helper slot() en la plantilla para establecer su valor:

// apps/frontend/modules/job/templates/showSuccess.php
<?php slot(
  'title',
  sprintf('%s is looking for a %s', $job->getCompany(), $job->getPosition()))
?>

Si el valor del slot es difícil de generar, el helper slot() se puede utilizar en forma de bloque de código:

// apps/frontend/modules/job/templates/showSuccess.php
<?php slot('title') ?>
  <?php echo sprintf('%s is looking for a %s', $job->getCompany(), $job->getPosition()) ?>
<?php end_slot(); ?>

Algunas páginas, como por ejemplo la portada, muestran un título genérico. Para no tener que definir una y otra vez el mismo título en varias plantillas, se puede establecer en el layout un valor por defecto para el slot title:

// apps/frontend/templates/layout.php
<title>
  <?php if (!include_slot('title')): ?>
    Jobeet - Your best job board
  <?php endif; ?>
</title>

El helper include_slot() devuelve el valor true si se ha definido algún valor para el slot. Por tanto, cuando se establece el valor del slot, el código anterior lo muestra normalmente. En otro caso, se muestra un título genérico.

Nota Hasta ahora se han visto varios helpers que empiezan por include_. Estos helpers muestran directamente el código HTML y la mayoría disponen de una versión alternativa que empieza por get_ y que sólo devuelve el contenido, sin mostrarlo.

<?php include_slot('title') ?>
<?php echo get_slot('title') ?>
 
<?php include_stylesheets() ?>
<?php echo get_stylesheets() ?>