我检查了这个问题和这个食谱部分。
我创建了这样的代码并做了以下步骤:
在 app/Config/core.php
Configure::write('Exception.handler', 'AppExceptionHandler::handle');
在 app/Config/bootstrap.php
App::uses('AppExceptionHandler', 'Lib');
在 app/Lib/AppExceptionHandler.php
class AppExceptionHandler {
public static function handle($error) {
$errorCode = $error->getCode();
if ($errorCode == 404) {
header("HTTP/1.0 404 Not Found");
} elseif ($errorCode == 500) {
header("HTTP/1.0 500 Internal Server Error");
}
echo "here is something is wrong";
}
}
除了渲染部分,一切正常。
到目前为止,我只能写“出了点问题”,但我无法在视图文件中查看它。
在“App/Controller”文件夹中,我有“ErrorsController.php”。
当我遇到异常时,我需要运行 ErrorsController。所以我将在该控制器的视图文件中进行渲染。
- 如何将用户重定向到 ErrorsController ?当然,我可以使用重定向命令来实现。但是当我将用户重定向到 ErrorsController::index() 函数并且当我在 ErrorsController 中发送 404 标头时,我再次被重定向到处理程序页面。
- 我应该在哪里设置响应标头?我应该在 ErrorsController 中还是从 handler 中设置它?
编辑:
class ErrorsController extends AppController {
function beforeFilter() {
if ( isset($this->request->params['pass'][0]) ) {
if ($this->request->params['pass'][0] == "404") {
$this->response->statusCode('404');
}
}
}
public function index($typeOfError) {
echo "here I am $typeOfError";
}
}
当我输入example.com/errors/index/404
输出是“这里有问题”但我需要它是“这里我是 404”。因为当我进入 ErrorsController 的操作并发送 404 标头时,我被重定向到 AppHandler 的句柄。那么如何渲染我自己的视图呢?
这个问题还是存在的。。