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