2012-06-29 18 views
6

Para errores de CakePHP Sé que existen soluciones CakeError y AppError. Pero necesito hacer una redirección dentro del controlador.CakePHP redirecciona con código de estado 404

En AppController existe:

function afterFilter() { 
    if ($this->response->statusCode() == '404') 
    { 
     $this->redirect(array(
      'controller' => 'mycontroller', 
      'action' => 'error', 404),404 
     ); 
    } 
} 

Pero esto no crea un código de estado 404. Crea un código 302. he cambiado de código para esto:

$this->redirect('/mycontroller/error/404', 404); 

Pero el resultado es el mismo.

he añadido esto, no funcionó también en desuso:

$this->header('http/1.0 404 not found'); 

¿Cómo puedo enviar un código 404 dentro del controlador redirigir?

Respuesta

17

Si desea devolver un error 404, utilice el soporte incorporado CakeError para ello:

throw new NotFoundException(); 

Usted puede lanzar esta excepción de su controlador y se debe generar una respuesta 404.

Hay más excepciones incorporadas here.

Si está interesado en crear una página de error personalizada, vea this post.

De lo contrario, no creo que sea posible devolver un código de cabecera 404 y seguir redirigiendo. Http especifica los códigos de estado de redirección a be in the 300s, y esta es la convención que sigue CakePHP.

3

Por alguna razón, usar redirect() cambiará el código de estado a 3xx. Si desea ejecutar otra acción y todavía volver 404, puede hacerlo de la siguiente manera:

$this->controller->response->statusCode(404); 
$this->controller->render('/mycontroller/error/404'); 
$this->controller->response->send(); 

Esto ejecutará myController :: error (404) sin redirección.

-1

CakePHP 3

use Cake\Network\Exception\NotFoundException; 
... 
throw new NotFoundException(__('Article not found')); 
Cuestiones relacionadas