Ver Mensaje Individual
  #5 (permalink)  
Antiguo 11/03/2012, 19:58
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Propagación de errores en MVC

Las excepciones como tal son para eso, para casos excepcionales, no debes de manejar el flujo de tu aplicación usando excepciones, y como dices tú, al usuario solamente le debes de mostrar run mensaje de error y no una excepción.

Dentro de tu flujo de tu frontController debes de manejar un bloque try/catch para las excepciones y guardarlas en un log para su posterior análisis, pero como dice Smolky, para casos que debas de controlar debes de forzosamente regresar alguna información.

Por ejemplo el componente Zend_Auth de Zend, este tiene un método authenticate que puede ser correcto o no dependiendo de la información del usuario, por ejemplo:
Código PHP:
Ver original
  1. $result = $auth->authenticate($adapter);
  2.  
  3. if (!$result->isValid()) {
  4.         switch ($result->getCode()) {
  5.               case Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND:
  6.                     // mostrar error
  7.         }
  8. }

No devuelves como tal un error si no un objeto result, que puede ser o no válido, para casos como que no tengas un item en la base de datos puedes usar null para verificar, por ejemplo:
Código PHP:
Ver original
  1. $item = $model->getItem($id);
  2. if ($item === null) {
  3.         // show error message
  4. }

O usar un esquema como el anterior, de devolver un objeto sin datos con un código de error:
Código PHP:
Ver original
  1. $item = $model->getItem($id);
  2. if (!$item->isValid()) {
  3.         // muestras error
  4. }

Como tal formas de hacerlo hay muchas, todo depende del diseño de tu aplicación y que uses las excepciones para casos excepcionales (por ejemplo que no exista la conexión a la BDD, etc), ese tipo de acciones sí deben de lanzar excepciones que debes de cachar en tu frontController y ya de ahí solo mostrar un error genérico al usuario y enviar una alerta.

Saludos.