For CakePHP errors I know that there exists CakeError and AppError solutions. But I need to make a redirection within controller.
In AppController there exists:
function afterFilter() {
if ($this->response->statusCode() == '404')
{
$this->redirect(array(
'controller' => 'mycontroller',
'action' => 'error', 404),404
);
}
}
But this doesn't create a 404 status code. It creates a 302 code. I changed code to this:
$this->redirect('/mycontroller/error/404', 404);
But the result is same.
I added this, it didn't work also deprecated:
$this->header('http/1.0 404 not found');
How can I send a 404 code within controller redirect ?
If you want to return a 404 error, use the built in CakeError support for it:
throw new NotFoundException();
You can throw this exception from your controller and it should generate a 404 response.
There are more built-in exceptions here.
If you are interested in making a custom error page, then see this post.
Otherwise, I don't think it is possible to return a 404 header code and still redirect. Http specifies redirect status codes to be in the 300s, and this is the convention CakePHP follows.
For some reason using redirect() will change the status code to 3xx. If you want to execute another action and still return 404, you can do as follows:
$this->controller->response->statusCode(404);
$this->controller->render('/mycontroller/error/404');
$this->controller->response->send();
This will execute Mycontroller::error(404) without redirect.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With