ルート保護とカスタマイズエラーページ2021/08/29に公開2021/08/30LaravelPHPtechこのページ、Laravelをやっているなら、誰しも一度は見たことがあるでしょう。404だけでなく、ルート保護のために、開発者が意図的にエラーページへリダイレクトすることがしばしばあります。Foundではなく、他のメッセージとかにしたいな、と思ったりすることもあります。今回はルート保護とエラーページのカスタマイズについて見ていきます。エラーページカスタマイズエラーの種類により、それぞれ違うページにリダイレクトしたい場合があります。404はページ・リソースが見つからない、403は権限が足りない、401は認証・ログインしていない、500はサーバーエラーなど、エラーコードにより分けることが想定できるでしょう。Laravelではこれらのページのブレードファイルが作成されています。それらのファイルを変更したい場合、まずはリソースフォルダーにパブリッシュする必要があります。--tag=laravel-errorsこれでresources/views/errorsのフォルダーにデフォルトのブレードファイルがコピーされます。実際にエラーページにリダイレクトする時はこちらのフォルダーのファイルを優先的に使われます。503のエラーコードと対応するページがあります。コントローラなどではabort関数を使うことで、これらのエラーページにリダイレクトされます。abort(400,'不正なアクセスです')など。それで、ブレードビューの中では、abort関数に渡されたメッセージを受け取ることが可能です。ちなみにabort関数は任意のResponseオブジェクトを引数として受け入れられます。今回は例として、400と405のページを追加します。404.blade.phpからブレードコードをコピーして、タイトル、コードとメッセージを変更します。'アクセスが不正です'))すべてのエラーページはminimal.blade.phpを継承しています。そのため、スタイリングのカスタマイズはこちらとなります。BootstrapとかのCSSフレームワークは効かないので、ヘッダーのセクションで直接cssを書くのが良いでしょう。今回は前のページに戻るボタンをつけようとします。ボタンのブロックを追加します。0.25rem;}これですべてのエラーページに元のページに戻るリンクが付けられます。Ajaxリクエストのルート保護エラーページができましたので、次にルート保護を見ていきます。前節では触れましたが、ここではabort関数を使います。あるパターンの1つとして、とあるルートがajaxリクエストのみを扱っていて、直接ブラウザーからURLを打って行こうとしたら、エラーページにリダイレクトしたい。abort(400);}あるいは、もっとオススメなやり方として、カスタマイズのミドルウェアを作って処理します。}}最後に、必要なルートにこのミドルウェアを付ければOKです。'AjaxController@index')->middleware('ajax.only');HTTPリクエストのルート保護もう一つよくあるパターンとして、このルートはPOSTリクエストとか、DELETEリクエストとかのみに使いたい、GETしようとするときはエラーページにリダイレクトしたいと。シンプルなやり方として、HTTPメソッドが不正のエクセプションを利用し、app\Exception\Handler.phpファイルを編集します。}web.phpなどのルートファイルに対応するHTTPメソッドが定義されていない場合、MethodNotAllowedHttpExceptionとのエクセプションが出るため、一概に405のページにリダイレクトします。Learnerバッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。