Foros del Web » Programando para Internet » PHP » Zend »

Mostrar Error 404

Estas en el tema de Mostrar Error 404 en el foro de Zend en Foros del Web. Hola. Tengo una duda para "disparar" un error 404. Me explico. Tengo una aplicación en Zend con 2 modulos (default y admin). Estoy en pleno ...
  #1 (permalink)  
Antiguo 28/10/2011, 17:39
 
Fecha de Ingreso: marzo-2006
Mensajes: 47
Antigüedad: 18 años, 7 meses
Puntos: 0
Mostrar Error 404

Hola. Tengo una duda para "disparar" un error 404. Me explico.

Tengo una aplicación en Zend con 2 modulos (default y admin). Estoy en pleno desarrollo pero quiero mostrar algo de la página. Entonces decidí hacer el Home especial y si alguien pone otra direccion (por mas que exista) quisiera que me arroje un error 404 que he personalizado.
Tengo un plugin que maneja el layout de acuerdo al modulo. Tal vez ahi tenga que agregar algo pero no me doy cuenta que.

Cualquier ayuda estaré agradecido.

Saludos
  #2 (permalink)  
Antiguo 28/10/2011, 17:49
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Mostrar Error 404

Puedes crear un plugin que compruebe el request y si es diferente de home lanzar una excepción,

Código PHP:
Ver original
  1. throw new Zend_Controller_Action_Exception('Page not found', 404);

también puedes setear el HttpResponseCode al request.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 28/10/2011, 20:03
 
Fecha de Ingreso: marzo-2006
Mensajes: 47
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Mostrar Error 404

Gracias masterpuppet. Lo hice seteando el HttpResponseCode desde un plugin y funcionó perfecto.
No se bien porque pero desde el plugin me tiraba un error cuando queria disparar la excepcion

Saludos
  #4 (permalink)  
Antiguo 29/10/2011, 04:56
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Mostrar Error 404

A mí la excepción me llevó al ErrorController:ErrorAction, pero el HttpResponseCode me lleva al que el navegador indica

Código PHP:
Ver original
  1. <?php
  2. // application/Bootstrap.php
  3. class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
  4. {
  5.     protected function _initError404()
  6.     {
  7.         $this->bootstrap('frontController');
  8.         $this->getResource('frontController')->registerPlugin(
  9.             new Application_Plugin_Error404()
  10.         );
  11.     }
  12. }

Esta me lleva a application/controllers/ErrorController.php
Código PHP:
Ver original
  1. <?php
  2. // application/plugins/Error404.php
  3. class Application_Plugin_Error404 extends Zend_Controller_Plugin_Abstract
  4. {
  5.     public function routeShutdown(Zend_Controller_Request_Abstract $request)
  6.     {
  7.         // verificaciones...
  8.  
  9.         throw new Zend_Controller_Action_Exception('Page not found', 404);
  10.     }
  11. }

Esta me lleva al que tiene el navegador
Código PHP:
Ver original
  1. <?php
  2. // application/plugins/Error404.php
  3. class Application_Plugin_Error404 extends Zend_Controller_Plugin_Abstract
  4. {
  5.     public function routeShutdown(Zend_Controller_Request_Abstract $request)
  6.     {
  7.         // verificaciones...
  8.  
  9.         $this->getResponse()->clearBody();
  10.         $this->getResponse()->clearHeaders();
  11.         $this->getResponse()->setHttpResponseCode(404);
  12.     }
  13. }

¿Cómo puedo hacer que la segunda me lleve al personalizado 404?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 29/10/2011 a las 05:03
  #5 (permalink)  
Antiguo 31/10/2011, 08:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Mostrar Error 404

El problema es que por defecto, Zend cacha todas las excepciones hacia el ErrorController:ErrorAction, tendrías que dentro de ese mismo verificar y establecer el 404.

Saludos.
  #6 (permalink)  
Antiguo 31/10/2011, 16:15
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Mostrar Error 404

Sí, ese lo sé, y me imaginé o tengo la idea de como indicarlo en el error, al menos reforzaste la idea que tenía, al que me refiero es al segundo ejemplo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 01/11/2011, 08:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Mostrar Error 404

Por eso precisamente, al enviar la excepción, ira al ErrorController para indicar el 404.
  #8 (permalink)  
Antiguo 01/11/2011, 09:01
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Mostrar Error 404

¿setHttpResponseCode envia una excepcion?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 01/11/2011, 09:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Mostrar Error 404

No para nada, es por eso que si te fijas el Error Controller lo hace al inspeccionar el tipo de excepción.

Saludos.

Etiquetas: 404
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:19.