Ver índice de contenidos del libro

4.3. Enlazando a otra acción

Ya se ha comentado que existe una independencia total entre el nombre de la acción y la URL utilizada para llamarla, por lo que si se crea un enlace a otraAccion en una plantilla como en el Listado 4-10, sólo funcionará con el enrutamiento establecido por defecto. Si más tarde se decide modificar la manera de mostrar las URL, entonces será necesario verificar todas las plantillas para modificar los enlaces o hipervínculos.

Listado 4-10 - Forma clásica de incluir los enlaces

<a href="/miaplicacion_dev.php/mimodulo/otraAccion?nombre=anonimo">
  Nunca digo mi nombre
</a>

Para evitar este inconveniente, es necesario siempre utilizar el helper link_to() para crear enlaces a las acciones de la aplicación. El Listado 4-11 muestra el uso del helper para enlaces.

Listado 4-11 - El helper link_to()

<p>¡Hola, Mundo!</p>
<?php if ($hora >= 18): ?>
<p>Quizás debería decir buenas tardes. Ya son las <?php echo $hora ?>.</p>
<?php endif; ?>
<?php echo form_tag('mimodulo/otraAccion') ?>
  <?php echo label_for('nombre', '¿Cómo te llamas?') ?>
  <?php echo input_tag('nombre') ?>
  <?php echo submit_tag('Ok') ?>
  <?php echo link_to('Nunca digo mi nombre','mimodulo/otraAccion?nombre=anonimo') ?>
</form>

El código HTML resultante es el mismo que el anterior, pero en este caso, si se modifican las reglas de enrutamiento, todas las plantillas siguen funcionando correctamente ya que se actualizan las URL de forma automática.

El helper link_to(), al igual que muchos otros, acepta un argumento para opciones especiales y atributos de etiqueta adicionales. El Listado 4-12 muestra un ejemplo de un argumento option y su código HTML resultante. El argumento option puede ser tanto un array asociativo como una simple cadena de texto mostrando pares de clave=valor separados por espacios.

Listado 4-12 - La mayoría de los helpers aceptan un argumento option

// Argumento "option" como un array asociativo
<?php echo link_to('Nunca digo mi nombre', 'mimodulo/otraAccion?nombre=anonimo',
  array(
    'class'    => 'enlace_especial',
    'confirm'  => '¿Estás seguro?',
    'absolute' => true
)) ?>
 
// Argumento "option" como una cadena de texto
<?php echo link_to('Nunca digo mi nombre', 'mimodulo/otraAccion?nombre=anonimo',
  'class=enlace_especial confirm=¿Estás seguro? absolute=true') ?>
 
// Las dos funciones generan el mismo resultado
 => <a class="enlace_especial" onclick="return confirm('¿Estás seguro?');"
    href="http://localhost/miaplicacion_dev.php/mimodulo/otraAccion/nombre/anonimo">
    Nunca digo mi nombre</a>

Siempre que se utiliza un helper de Symfony que devuelve una etiqueta HTML, es posible insertar atributos de etiqueta adicionales (como el atributo class en el ejemplo del Listado 4-12) en el argumento option. Incluso es posible escribir estos atributos a la vieja usanza que utiliza HTML 4.0 (sin comillas dobles), y Symfony se encargará de mostrarlos correctamente formateados en XHTML. Esta es otra razón por la que los helpers son más rápidos de escribir que el HTML puro.

Nota Dado que requiere un procesado y transformación adicional, la sintaxis de cadena de texto es un poco más lenta que la sintaxis en forma de array.

Al igual que los helpers para formulario, los helpers de enlaces son muy numerosos y tienen muchas opciones. En el capítulo 9 se explican todos estos helpers con más detalle.