ルートが存在しない場合に 404 エラー コードをスローするにはどうすればよいですか?
ルーティング情報を設定した後の phalcon では、(ユーザーからの) 入ってくるルートがルート リスト内のいずれかのルートと一致するかどうかを確認する方法はありますか? 次に、ルートが存在しない場合は、404 エラーをスローします。
ルートが存在しない場合に 404 エラー コードをスローするにはどうすればよいですか?
ルーティング情報を設定した後の phalcon では、(ユーザーからの) 入ってくるルートがルート リスト内のいずれかのルートと一致するかどうかを確認する方法はありますか? 次に、ルートが存在しない場合は、404 エラーをスローします。
次のようなものを使用できます。
public function main()
{
try {
$this->_registerServices();
$this->registerModules(self::$modules);
$this->handle()->send();
} catch (Exception $e) {
// TODO log exception
// remove view contents from buffer
ob_clean();
$errorCode = 500;
$errorView = 'errors/500_error.phtml';
switch (true) {
// 401 UNAUTHORIZED
case $e->getCode() == 401:
$errorCode = 401;
$errorView = 'errors/401_unathorized.phtml';
break;
// 403 FORBIDDEN
case $e->getCode() == 403:
$errorCode = 403;
$errorView = 'errors/403_forbidden.phtml';
break;
// 404 NOT FOUND
case $e->getCode() == 404:
case ($e instanceof Phalcon\Mvc\View\Exception):
case ($e instanceof Phalcon\Mvc\Dispatcher\Exception):
$errorCode = 404;
$errorView = 'errors/404_not_found.phtml';
break;
}
// Get error view contents. Since we are including the view
// file here you can use PHP and local vars inside the error view.
ob_start();
include_once $errorView;
$contents = ob_get_contents();
ob_end_clean();
// send view to header
$response = $this->getDI()->getShared('response');
$response->resetHeaders()
->setStatusCode($errorCode, null)
->setContent($contents)
->send();
}
}
Microコンポーネントを使用している場合は、これを使用できます。
$app->notFound(
function () use ($app) {
$app->response->setStatusCode(404, "Not Found")->sendHeaders();
echo 'This is crazy, but this page was not found!';
}
);
もちろん、他の人が .htaccess ファイルに関して投稿した提案を使用することもできますが、上記は、他に何も触れずに Phalcon で行う方法です。
Phalcon でエラーを処理する (または必要に応じてオーバーライドされる) デフォルトのエラー ハンドラーに関して、パイプラインを下る新機能もあります。
要旨の Nesbert へのクレジット
404 ページの設定が完了したら、このページへの間違った URL に訪問者を送るだけで済みます。これを行うには、.htaccess ファイルに次の行を追加するだけです。
ErrorDocument 404 /404.php
404 エラー テンプレートは、好きな場所に配置できます。たとえば、すべてのエラー メッセージを errormessages というフォルダーに配置できます。
ErrorDocument 404 /errormessages/404.php
PHPスクリプトの実行中にデフォルトのHTTP404エラーを使用する場合:
header("HTTP/1.0 404 Not Found");
ただし、これはクライアントに最初に送信するものであることを忘れないでください。
WebサーバーのデフォルトのPHPエラーをカスタマイズしたくない場合は、ソフトウェアによって異なります。たとえば、filde apacheを使用して、この種のエラーを表示するのは簡単です。