Ver índice de contenidos del libro

5.3. Personalizando el enrutamiento

Por el momento, cuando accedes a la URL /, se muestra la página de bienvenida por defecto de Symfony. El motivo es que esa URL cumple con el patrón de la ruta homepage. No obstante, parece lógico modificar esa URL para que apunte a la página principal de Jobeet. Para ello, sustituye el valor de la variable module por job en la ruta homepage:

# apps/frontend/config/routing.yml
homepage:
  url:   /
  param: { module: job, action: index }

Ahora también podemos modificar el enlace del logotipo de Jobeet en el layout para que apunte a la ruta homepage:

<!-- apps/frontend/templates/layout.php -->
<h1>
  <a href="<?php echo url_for('@homepage') ?>">
    <img src="/images/jobeet.gif" alt="Jobeet Job Board" />
  </a>
</h1>

Nota Cuando se modifica la configuración del sistema de enrutamiento, los cambios se aplican instantáneamente en el entorno de desarrollo. Sin embargo, para que se tengan en cuenta en el entorno de producción, es necesario borrar la cache.

Como lo anterior ha sido muy fácil, vamos a ver un ejemplo más complejo, que consiste en modificar las URL de las páginas de detalle de las ofertas de trabajo por algo más útil, como por ejemplo:

/job/sensio-labs/paris-france/1/web-developer

Sin conocer nada de Jobeet y sin ni siquiera ver la página, a partir de la URL ya sabes que una empresa llamada Sensio Labs está buscando programadores web para trabajar en París, Francia.

Nota Las URL limpias son muy importantes porque proporcionan información al usuario. Además son muy útiles para poder copiarlas y pegarlas en un email y para optimizar tu sitio web para los buscadores.

A continuación se muestra un posible patrón que cumple las condiciones de esa URL:

/job/:company/:location/:id/:position

Modifica el archivo routing.yml y añade una nueva ruta llamada job_show_user al principio del archivo:

job_show_user:
  url:   /job/:company/:location/:id/:position
  param: { module: job, action: show }

Si ahora vuelves a acceder a la portada de Jobeet, verás que los enlaces no se han cambiado. El motivo es que para generar una ruta, tienes que pasar todas las variables necesarias. Por tanto, modifica la llamada al helper url_for() en la plantilla indexSuccess.php:

url_for('job/show?id='.$job->getId().'&company='.$job->getCompany().'&location='.$job->getLocation().'&position='.$job->getPosition())

Las URI internas también se pueden expresar utilizando la notación de los arrays:

url_for(array(
  'module'   => 'job',
  'action'   => 'show',
  'id'       => $job->getId(),
  'company'  => $job->getCompany(),
  'location' => $job->getLocation(),
  'position' => $job->getPosition(),
))