1

我检查了这个问题和这个食谱部分
我创建了这样的代码并做了以下步骤:

在 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。所以我将在该控制器的视图文件中进行渲染。

  1. 如何将用户重定向到 ErrorsController ?当然,我可以使用重定向命令来实现。但是当我将用户重定向到 ErrorsController::index() 函数并且当我在 ErrorsController 中发送 404 标头时,我再次被重定向到处理程序页面。
  2. 我应该在哪里设置响应标头?我应该在 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 的句柄。那么如何渲染我自己的视图呢?

这个问题还是存在的。。

4

0 回答 0