Manejando el error 404 con el Zend Framework

Zend FrameworkTras adoptar la plataforma de desarrollo de Zend al programar tus aplicaciones, una de las primeras dudas que surgen es cómo manejar el caso de las páginas no encontradas con esta filosofía. En principio el Framework deja total libertad al programador y únicamente muestra un error o excepción «Invalid controller specified» . Tras la adición del sistema de plugins, esta se convierte en una de las formas más fáciles de controlar este tipo de errores. Por ejemplo:

class Mi_Controller_Plugin_NoRoute
   extends Zend_Controller_Plugin_Abstract
{
   function preDispatch(Zend_Controller_Request_Abstract $request)
   {
       $frontController = Zend_Controller_Front::getInstance();
       $dispatcher = $frontController->getDispatcher();

       if (!$dispatcher->isDispatchable($request))
       {
           $request->setControllerName('index');
           $request->setActionName('noroute');
       }
   }
}

De esta forma (propuesta por Rob Allen), lo que hacemos es redirigir todos los errores 404 al controlador «Index» y a la acción «noroute». Así podemos manejarlos en un único lugar para toda la aplicación.

Otra de las alternativas propuestas (en mi opinión menos elegante) es la siguiente:

try {
	$front->dispatch();
} catch (Exception $e) {
	require_once dirname(__FILE__) . '/../application/Core/controllers/IndexController.php';
	$controller = new IndexController($front->getRequest(), $front->getResponse());
	if ($e instanceof Zend_Controller_Dispatcher_Exception) {
		$controller->error404Action();
	} else {
		throw $e;
	}
	$response = $front->getResponse();
	/* @var $response Zend_Controller_Response_Abstract */
	echo $response->__toString();
}

En esta ocasión, lo que hacemos es capturar la excepción del tipo Zend_Controller_Dispatcher_Exception que es lanzada cuando no se encuentra el controlador o la acción especificadas en la url.

Personalmente prefiero la primera opción, ya que me parece mucho más versatil y elegante y puede usarse para manejar otro tipo de errores parecidos. De hecho es la que uso en mis proyectos (aunque con algunas modificaciones). Pero sólo es una preferencia personal, ya que la segunda opción también permite capturar distintos tipos de excepciones y dispone de las mismas posibilidades.

Mientras más proyectos hago basados en este Framework, más me gusta la potencia y sobre todo la versatilidad y libertad que te ofrece. Pero lo que más me gusta es que programar en php ha dejado de ser monótono y ahora vuelve a ser muuy divertido ;)

Publicado por

manuel

Me dedico al desarrollo de aplicaciones. Principalmente trabajo con XHTML, CSS, Javascript, XML, JSON, PHP, MySQL, Linux/MacOS X y Flash actionscript. Intento siempre trabajar con estándares y simplificar el desarrollo y las aplicaciones finales con el objetivo de orientarlas al usuario (que sean útiles y faciliten el trabajo).

2 comentarios en «Manejando el error 404 con el Zend Framework»

  1. Muy bueno Manuel,

    a mi tb me parece mas elegante la primera solución. Es increible que llevo un montón de rato buscando esta solución en ingles por google, y lo acabo encontrando en español.

    Creo que a ZF todavia le falta mejorar la documentación y un poco mas de comunidad, pero si que deja libertad es cierto.

    salu2

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *