2012-06-29 37 views
6

Đối với lỗi CakePHP, tôi biết rằng có tồn tại các giải pháp CakeError và AppError. Nhưng tôi cần phải thực hiện chuyển hướng trong bộ điều khiển.Chuyển hướng CakePHP với mã trạng thái 404

Trong AppController có tồn tại:

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

Nhưng điều này không tạo ra một mã trạng thái 404. Nó tạo ra một mã 302. Tôi đã thay đổi mã này:

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

Nhưng kết quả là giống nhau.

tôi thêm này, nó đã không làm việc cũng bị phản đối:

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

Làm thế nào tôi có thể gửi một mã số 404 trong vòng điều khiển chuyển hướng?

Trả lời

17

Nếu bạn muốn trả về một lỗi 404, sử dụng được xây dựng trong hỗ trợ CakeError cho nó:

throw new NotFoundException(); 

Bạn có thể ném ngoại lệ này từ điều khiển của bạn và nó sẽ tạo ra một phản ứng 404.

Có nhiều trường hợp ngoại lệ được tích hợp sẵn here.

Nếu bạn quan tâm đến việc tạo trang lỗi tùy chỉnh, hãy xem this post.

Nếu không, tôi không nghĩ rằng có thể trả lại mã tiêu đề 404 và vẫn chuyển hướng. Http chỉ định mã trạng thái chuyển hướng cho be in the 300s và đây là quy ước CakePHP theo sau.

3

Vì một số lý do sử dụng chuyển hướng() sẽ thay đổi mã trạng thái thành 3xx. Nếu bạn muốn thực hiện một hành động khác và vẫn trả về 404, bạn có thể thực hiện như sau:

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

Điều này sẽ thực thi Mycontroller :: error (404) mà không chuyển hướng.

-1

CakePHP 3

use Cake\Network\Exception\NotFoundException; 
... 
throw new NotFoundException(__('Article not found')); 
Các vấn đề liên quan