この記事では、LaravelでURLから表示しているページを判別する方法について説明します。
ページのURLによってbladeで条件分岐したいときなどに使う機会があるかと思います。
大きく方法としては2種類あるのでそれぞれの方法と、違いを紹介していきます。
Request::is() メソッド
まず最初はRequest::is() メソッドです。
この方法は、引数にドメイン配下のURLを指定することでページを指定することができます。
以下は、Request::is() メソッドを使用してページを判別する例です。
ドメイン名は「https://test.com」としておきます。
@if (Request::is('/'))
// トップページ(https://test.com/)
@elseif (Request::is('about'))
// アバウトページ(https://test.com/about/)
@else
// その他のページ
@endif
このようにして条件分岐することができるようになります。
「*」を使用することも可能
Request::is()メソッドの引数には「*」を使用することができます。
「*」を使用することで特定の条件に当てはまるすべてのページを指定することができるようになります。
以下コードがその一例です。
@if (Request::is('shop/*'))
// ショップ詳細ページすべて
@endif
このように「*」を使って「https://test.com/shop/」配下のページを指定することができます。
例えば「https://test.com/shop/shibuya」や「https://test.com/shop/shinjuku」などのURLも条件に合致させることができます。
Request::routeIs() メソッドでページを判別
続いては「Request::routeIs()」メソッドです。
こちらのメソッドでは引数にルーティング名を指定することでページを判定できます。
例えばweb.phpで以下のようなルーティングをしていたとします。
Route::get('posts', 'PostController@index')->name('posts.index');
この場合、「https://test.com/posts」で投稿一覧ページが表示されます。
この場合は「Request::routeIs() 」を使って判別できます。
@if (Request::routeIs('posts'))
// https://test.com/postsのページの処理
@endif
Route::is()メソッドでも代用可能
route::is()メソッドも引数にルーティング名を指定することで同じようにページを判別することができます。
@if (Route::is('posts'))
// https://test.com/postsのページの処理
@endif
「*」も使用可能
先ほどと同様、「*」を使うこともできます。
@if (Request::routeIs('posts.*'))
// ルーティング名に「posts」が付くページ
@endif
この場合、ルーティング名に「posts」が付くページが対象になります。
まとめ
Route::is() メソッドと Request::is() メソッドを使用して、ページを判別する方法を説明しました。
2つのメソッドを場合によって使い分けることでより柔軟に読みやすいコードで開発ができると思います。
参考になれば幸いです。
エンジニアにおすすめ書籍
エンジニアになりたて、これから勉強を深めていきたいという方におすすめの書籍はこちら!