LaravelのBladeでURLによってidやclass属性を動的に切り替える方法

laravel-request-is

例えば、メニューなどのclass属性に、特定のページが表示された場合に[active]や[current]などのCSS要素を動的に切り替えたくなることが多々あります。
そんな時Laravelでは、Blade内でRequest::is()関数を使い、遷移したページのURLによって条件分岐させることで実現できます。

現在ページのURLを判定する

LaravelBlade内で現在のページ指定したURLを含むか判定するには、if分とRequest::is()関数を組み合わせます。
使い方はとっても簡単です。

@if(Request::is('admin'))
    true
@elseif
    false
@endif

例えば、現在のページURLが[http(s)://www.example.com/home]だったら「true」、それ以外なら「false」を返します。
Blade以外(例えばコントローラなど)であれば、このように書きます。

if ($request->is('admin/*')) {
    //
}

Class属性の値を切り替える

今回はCSSClass属性の値を切り替えることを前提に書いていますが、もちろん他の要素やテキストや画像などのコンテンツを分岐するのにも応用できます。以下は、現在のURLが[home]の時だけclassに[active]を追加する例です。

<li {!! (Request::is('home') ? 'class="active"' : '') !!}>
    <a href="/home"><i class="fa fa-dashboard"></i> ホーム</a>
</li>

LaravelBladeでは、他にもこのような書き方もできます。

<li @if(Request::is('home')) class="active" @endif>
    <a href="/home"><i class="fa fa-dashboard"></i> ホーム</a>
</li>

また、ワイルドカードによるパターン指定もできます。
以下のように記述すると、例えば[admin/users/]以降に[create、show、edit、delete]などがあった場合でもtrueを返します。

<li @if(Request::is('admin/users/*')) class="active" @endif>
    <a href="/home"><i class="fa fa-dashboard"></i> ホーム</a>
</li>

JavaScriptでもできると思うが、LaravelBladeを使うなら余計な記述をしなくていいので、こっちの方がスマートかと思います。


Amazonベストセラー

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA