Laravelのbladeファイル内で現在のURLによって条件分岐させる方法
こんにちは、シロウ(shiro_life0)です。
LaravelでWebアプリを作っていると、テンプレートファイル(bladeファイル)内でURLによって条件を分岐させたいという場合があると思います。
そこで、今回の記事では『URLによって条件処理をする方法』を紹介していきます。
方法としては2つあるので、ぜひ参考にしてください。
LaravelでURLによって条件分岐させる方法
2つの方法を紹介しますが、②の方法の方がオススメです。
①:『Request::is()』を使う方法
まず1つ目の方法は『Request::is()』を使用する方法です。
使用方法としては「()の中にドメイン後のURLを記述するだけ」です。
具体的な使用方法は以下の通り。
@if(Request::is('users'))
<p>成功</p>
@endif
このようにすれば「https:://~~~ ドメイン名~~~/uesrs」にアクセスした時にif文内の処理(成功)が 表示されます。
ちなみに下記のように「*(アスタリスク)」も使えます。
@if(Request::is('users/*'))
<p>成功</p>
@endif
念のために「*(アスタリスク)」の解説もしておくと、「*」は「全部」って意味です。
つまり、上記の処理だと「https:://~~~ ドメイン名~~~/uesrs/○○」ってな感じで、○○の部分がなんでもOKということです。
②:『Request::routeIs()』を使う方法
次に紹介するのがrouteIs()を使用する方法です。
使用方法としては「()の中にルーティング名を記述するだけ」です。
使用方法としては下記の通り。
@if(Request::routeIs('users.index'))
<p>成功</p>
@endif
これだけなのでとっても簡単ですね。
この方法の注意点としては名前付きルートにしか使用できないことです。
例えば上記のように「users.index」を使用するなら、下記のように名前付きルートを作成する必要があります。
Route::get('users', 'UsersController@index')->name('users.index');
//下記の記述でもOK
Route::resource('users', 'UsersController');
resourceを使えば自動的に名前付きルートが作成されます。
長くなってしまうので、この辺りは各自調べてくださいm(_ _)m
ちなみに「*(アスタリスク)」を使うこともできます。
@if(Request::routeIs('users.*'))
<p>成功</p>
@endif
「Route::is」で書くこともできる。
ちなみにですが、下記のように「Route::is
」という書き方も「Request::routeIs
」と同じです。
@if(Route::is('users.index'))
<p>成功</p>
@endif
お好きな方をお使いください。
【補足】URLによってクラスを付けたり外したりしたい場合
おそらくURLによってクラスを付与したり、付与しなかったりとしたい時って多いかと思います。
そのような時は『三項演算子』を使いましょう。
例えば『「https:://~~~ ドメイン名~~~/uesrs」にアクセスしている時はactiveクラスを付与したい』という時は下記のように記述します。
//三項演算子を使わなかった場合
@if(Request::routeIs('users.index'))
<p class="active">アクティブクラスを付与</p>
@else
<p>アクティブクラスを付与しない</p>
@endif
//三項演算子を使った場合
<p class="{{ Request::routeIs('users.index') ? 'side-active' : '' }}">
usersにアクセスしていたらactiveクラスを付与
</p>
みて分かる通り、三項演算子を使った方が大幅に記述を少なくできます。
ちなみに三項演算子の書き方は下記の通り。
そのため、クラスを付与したりしなかったりの処理は
とすれば実現できます。
さて、今回はこれにて終わりです。
もし参考になりましたら、Twitterとかでシェアしてもらえると嬉しいです(*´ω`*)ノ
それではまた!
人に教える素振りならソースを画像で貼るのはいかがでしょう?
役に立ちそうで嫌がらせされてる気分で不快です。
コメントありがとうございます。
画像で貼ると、ソースコードをコピーしたいと考えている人からすると不便だと思うので、このようにしています。
一般的にソースコードなどの解説時は、ソースコードをコードブロックで表示する記事が多いと思うのですが、それらの記事に対しても不快に感じてらっしゃるのですか?(それとも僕の記事限定でしょうか?)