PHP/Laravel

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文内の処理(成功)が 表示されます。

ローカル環境なら「http://localhost:8000/users」とかにアクセスすれば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>

みて分かる通り、三項演算子を使った方が大幅に記述を少なくできます。

ちなみに三項演算子の書き方は下記の通り。

条件 ? trueだった時の処理 : falseだった時の処理

そのため、クラスを付与したりしなかったりの処理は

 

<p class=”{{ 条件 ? trueだった時の処理 : falseだった時の処理  }}”>

とすれば実現できます。

 

さて、今回はこれにて終わりです。

もし参考になりましたら、Twitterとかでシェアしてもらえると嬉しいです(*´ω`*)ノ

それではまた!