如何在Zend Framework中抛出404异常?

问题描述 投票:24回答:3

我试图使用Zend_Controller_Plugin_ErrorHandler来处理404错误案例。根据 文档例如,插件有常量,可以用来匹配Exception类型并进行相应的处理。

switch ($errors->type) {
        case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
        case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
        case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
            // 404 error -- controller or action not found

有谁知道如何专门创建这些类型的异常?

php zend-framework
3个回答
72
投票

你可以这样做。

 $this->getResponse()->setHttpResponseCode(404);

或者...

throw new Zend_Controller_Action_Exception('This page does not exist', 404);

3
投票

你可以这样做。

$this->getResponse()->setStatusCode(404);
return;

0
投票

当我在谷歌上搜索时,我总是在这里登陆,所以Zend Framework 2,Zend Framework 3和Laminas的答案是(如果你使用的是MVC模块)。

$this->response->setStatusCode(404);
return $this->response;

你必须 return 里边的动作和 确保你返回响应对象! 否则有可能会暴露更多的数据,而不是你想要的!

如果你使用的是 诗篇 并得到一个错误,因为 {Laminas|Zend}\Stdlib\ResponseInterface 不知道 setStatusCode()你必须在之前做一个类型检查。

 use Zend\Http\Response as HttpResponse;
 // ...
 if ($this->response instanceof HttpResponse) {
     $this->response->setStatusCode(404);
 }
 return $this->response;

当你想在Zend Expressive或Laminas Mezzio中做404的时候。那么请参考文件.

© www.soinside.com 2019 - 2024. All rights reserved.