Symfony 1.4, la guía definitiva

4.3. Obteniendo información de la petición

El método getParameter() del objeto sfRequest permite recuperar desde la acción los datos relacionados con la información que envía el usuario a través de un formulario (normalmente en una petición POST) o a través de la URL (mediante una petición GET). El Listado 4-11 muestra cómo es posible obtener el valor del parámetro nombre en la acción actualizar.

Listado 4-11 - Recuperando datos de la petición dentro de una acción

<?php

class contenidoActions extends sfActions
{
  // ...

  public function executeActualizar(sfWebRequest $request)
  {
    $this->nombre = $request->getParameter('nombre');
  }
}

Para que el código sea más sencillo, a todos los métodos de tipo executeXxx() se les pasa como primer argumento el objeto que representa al sfRequest actual.

Si la manipulación de datos es simple, ni siquiera es necesario utilizar la acción para recuperar los parámetros de la petición. La plantilla tiene acceso a un objeto llamado $sf_params que ofrece un método get() para recuperar los parámetros de la petición, tal y como hace el método getParameter() en la acción.

Si la acción executeActualizar estuviera vacía, el listado 4-12 muestra cómo se puede obtener el valor del parámetro nombre desde la plantilla actualizarSuccess.php.

Listado 4-12 - Obteniendo datos de la petición directamente en la plantilla

<p>Hola, <?php echo $sf_params->get('nombre') ?>!</p>

Nota ¿Y por qué no utilizar en cambio las variables $_POST, $_GET, or $_REQUEST? Porque entonces las URL serían formateadas de manera diferente (como en http://localhost/articulos/europa/francia/economia.html, sin ? ni =), las variables comunes de PHP ya no funcionarían, y sólo el sistema de enrutamiento sería capaz de recuperar los parámetros de petición. Además, seguramente quieras agregar un filtro a los datos del de la petición para prevenir código malicioso, lo cual sólo es posible si se mantienen todos los parámetros de petición en un contenedor de parámetros.

El objeto $sf_params es más potente que simplemente añadir una especie de getter a un array. Por ejemplo, si sólo se desea probar la existencia de un parámetro de petición, se puede utilizar simplemente el método $sf_parameter->has(), en lugar de comprobar el valor en cuestión con get(), tal como en el Listado 4-13.

Listado 4-13 - Comprobando la existencia de un parámetro de petición en la plantilla

<?php if ($sf_params->has('nombre')): ?>
  <p>¡Hola, <?php echo $sf_params->get('nombre') ?>!</p>
<?php else: ?>
  <p>¡Hola, Juan Pérez!</p>
<?php endif; ?>

Como puede que hayas adivinado, el código anterior puede escribirse en una sola línea. Al igual que la mayoría de los métodos getter de Symfony, tanto el método $peticion->getParameter() en la acción, como el método $sf_params->get() en la plantilla (que por cierto llama al mismo método del mismo objeto), aceptan un segundo argumento: el valor por defecto a utilizar si dicho parámetro de petición no está presente.

<p>¡Hola, <?php echo $sf_params->get('nombre', 'Juan Pérez') ?>!</p>