Ver índice de contenidos del libro

6.6. Métodos de Validación y Manejo de Errores

Nota Las opciones que se describen en esta sección han sido declaradas obsoletas en Symfony 1.1, por lo que solamente funcionan si activas el plugin sfCompat10.

La validación de los datos de la acción -normalmente los parámetros de la petición- es una tarea repetitiva y tediosa. Symfony incluye un sistema de validación, utilizando métodos de la clase acción.

Se ve en primer lugar un ejemplo. Cuando un usuario hace una petición a miAccion, Symfony siempre busca primero un método llamado validateMiAccion(). Si lo encuentra, Symfony ejecuta ese método. El valor de retorno de esta validación determina el siguiente método que se ejecuta: si devuelve true, entonces se ejecuta el método executeMiAccion(); en otro caso, se ejecuta handleErrorMiAccion(). En el caso de que handleErrorMiAccion() no exista, Symfony busca un método genérico llamado handleError(). Si tampoco existe, simplemente devuelve el valor sfView::ERROR para producir la plantilla miAccionError.php. La Figura 6-2 ilustra este proceso.

El proceso de validación

Figura 6.2 El proceso de validación

La clave para un correcto funcionamiento de la validación es respetar la convención de nombres para los métodos de la acción:

  • validateNombreAccion es el método de validación, que devuelve true o false. Se trata del primer método buscado cuando se solicita la acción NombreAccion. Si no existe, la acción se ejecuta directamente.
  • handleErrorNombreAccion es el método llamado cuando el método de validación falla. Si no existe, entonces se muestra la plantilla Error.
  • executeNombreAccion es el método de la acción. Debe existir para todoas las acciones.

El listado 6-27 muestra un ejemplo de una acción con métodos de validación. Independientemente de si la validación falla o no falla, en el siguiente ejemplo se ejecuta la plantilla miAccionSuccess.php pero no con los mismos parámetros.

Listado 6-27 - Ejemplo de métodos de validación

class mimoduloActions extends sfActions
{
  public function validateMiAccion($peticion)
  {
    return $peticion->getParameter('id') > 0;
  }
 
  public function handleErrorMiAccion()
  {
    $this->message = "Parámetros no válidos";
 
    return sfView::SUCCESS;
  }
 
  public function executeMiAccion()
  {
    $this->message = "Los parámetros son válidos";
  }
}

Se puede incluir cualquier código en el método validate(). La única condición es que devuelva un valor true o false. Como es un método de la clase sfActions, tiene acceso a los objetos sfRequest y sfUser, que pueden ser realmente útiles para validación de los datos de la petición y del contexto.

Se pueden utilizar este mecanismo para implementar la validación de los formularios (esto es, controlar los valores introducidos por el usuario en un formulario antes de procesarlo), pero se trata de una tarea muy repetitiva para la que Symfony proporciona herramientas automatizadas, como las descritas en el Capítulo 10.