この質問とこの料理本のセクションを確認しました。
そのようなコードを作成し、次の手順を実行しました。
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 のハンドルにリダイレクトされるためです。では、どうすれば自分のビューをレンダリングできますか?
この問題はまだ存在します..