どうも、こんにちわ。
今回は、LaravelのBladeテンプレートファイル内でページ判定する方法を紹介したいと思います。
テンプレートと言えば、基本的には複数のページで共通のレイアウトやメニュー等は使用する際にとても便利ですが、中には基本的には共通なんだけど、特定のページのみにクラス名を付けて少しだけスタイルを変えたいなどといったこともあるかと思います。
その際に、わざわざ別テンプレートを用意するのは冗長的だし効率的ではありません。また、わざわざ全ページ共通に読み込まれる変数を用意して、それで判別するのも面倒です。そこでBladeテンプレートファイル内でページ判定をして処理する方法を紹介したいと思います。
環境
なお、今回のLaravel環境は以下の通りとなります。
今回の環境
- Laravel 5.4.36
URLを取得してページを判別
では、早速紹介していきたいと思いますが、今回はベーシックな方法であるURLを取得してページを判定する方法を紹介したいと思います。
Requestファサードを使ってURLを取得
LaravelのBladeテンプレート内でURLを取得する方法はヘルパー関数などを使用して取得する方法もありますがページ判定にはあまり向いていないので、今回は「Request」ファサードを使用して判別したいと思います。
RequestファサードはURLの取得だけではなく、Postメソッド等で渡したデータの取り扱いなどにも使うので、Controllerでも使用することの多いLaravelを代表するファサードの1つですね。
そんなLaravelを代表するファサードである「Request」ファサードには、例によってたくさんのメソッドがあります。いくつか例を挙げると下記のようなメソッドがあります。
フィールド | 例 |
---|---|
url | URLを取得(例:https://example.com) |
fullUrl | クエリ文字列等を含むURLを取得(例:https://example.com/?id=1) |
ip | クライアントIPアドレスを取得 |
has | リクエスト内に特定の値が存在の有無 |
その他のメソッドはこちらのページにリストがあるのでご参照ください。
isメソッドを使ってページを判別
このようにたくさんのメソッドを持つ「Request」ファサードですが、ページを判定する際に適しているメソッドが「is」メソッドになります。
この「is」メソッドは、リクエストのURIが指定されたパターンに合致するかを確認できるメソッドになります。
では、実際に「is」メソッドを使用してページ判定をする例を書いてみたいと思います。
設定としては、仮に「https://example.com/about」というページがあったとして、現在のリクエストがaboutページなのかどうかを判定します。
@if(Request::is('about'))
//aboutページに追加したい処理等
@endif
これだけですね。Requestファサードを呼び出してisメソッドを使ってパラメータに特定のパスを指定することで、現在のリクエストURIを判別して「true」か「false」で結果を返してくれます。それをif分で囲むことで判定して、trueだったら処理を追加するといった感じです。
例えば、「https://example.com/page/sample」というようなもう一階層深いページであれば、下記のようにパスを指定してあげれば大丈夫です。
@if(Request::is('page/sample'))
//page/sampleページに追加したい処理等
@endif
指定したページと他のそうでないページで処理を分けたいのであれば「else」を使ってやればいいだけです。
@if(Request::is('page/sample'))
//page/sampleページに追加したい処理等
@else
//他のpwー時に追加したい処理等
@endif
いたって簡単ですね。
まとめ
ということで、今回はLaravelのBladeテンプレート内でのページ判定を「Request」ファサードを使って対応する方法を紹介させていただきました。
特定のページだけちょっとカスタマイズするようなケースは多いですし、私個人も頻繁に使うので覚えておくと便利です。
てことで今回はここまで!また!