LoginSignup
9
4

More than 3 years have passed since last update.

【Laravel】現在のURLからメニューをActiveにする

Last updated at Posted at 2020-05-18

やりたいこと

Bootstrapでメニューに現在のURLからactiveクラスを付与したい

適当にルーティング用意

web.php
Route::get('/hoge','HogeController@index')->name('hoge');
Route::get('/fufa/{fuga_id}','FugaController@index')->name('fuga');
Route::get('/piyo/piyo','PiyoController@index')->name('piyo');

メニューのサンプル

<li>
    <a href="{{ route('hoge') }}">
        hoge
    </a>
</li>
<li class="active">
    <a href="{{ route('fuga',['fuga_id' => 1]) }}">
        fuga
    </a>
</li>
<li>
    <a href="{{ route('piyo') }}">
        piyo
    </a>
</li>

やり方

1

{{ request()->route()->named('hoge*') ? 'active' : '' }}
{{ request()->route()->named('fuga*') ? 'active' : '' }}
{{ request()->route()->named('piyo*') ? 'active' : '' }}

現在のリクエストが指定した名前付きルートのものであるかを判定したい場合は、Routeインスタンスのnamedメソッドを使います。
これが一番良い方法
必須パラメータ除いても判定できる
*で、仮にhoge.indexとかhoge.showとかも対応になる

2

{{ reqeust()->is('hoge') ? 'active' : '' }}
{{ reqeust()->is('fuga/*') ? 'active' : '' }}
{{ reqeust()->is('piyo/piyo') ? 'active' : '' }}

isメソッドにより、リクエストのURIが指定されたパターンに合致するかを確認できます。このメソッドでは*をワイルドカードとして使用できます。
変更に弱い。URL変えるたびにこちらも変える必要がある

参考

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4