LoginSignup
5
7

More than 3 years have passed since last update.

【Laravel】ブレードの中でルーティング名を活用する方法。リンク指定や条件分岐の方法

Last updated at Posted at 2021-04-09

Laravelでルート名を活用すると、ブレードの中でaタグのリンクをルート名で指定したり、現在表示されているページのルート名を調べて条件分岐をすることができる。

リンク先URLをルート名で指定する方法

href="{{ route( 'ルート名' ) }}"

データを渡す場合は第2引数に配列として渡す。
href="{{ route( 'ルート名' ), [ 'キー名' => '値' ] }}"

実例

以下のようにルーティングを設定している場合のaタグのhrefはルート名で指定できる。

/productのルート名を「product」
/product/{product_id}のルート名を「product.show」

.blade.php
<a href="{{ route('product') }}">
<a href="{{ route('product.show', [ 'product_id' => '001' ]) }}">

▼ルーティング例

web.php
Route::group(['prefix' => 'product', 'as' => 'product'], function(){
            Route::get('/', 'ProductController@intex');    //ルート名「product」
            Route::get('/{product_id}', 'ProductController@show')->name('.show');  //ルート名「product.show」
});

ProductControllerのindexアクションとshowアクションに飛ばす。


ルート名を使った条件分岐

ルート名を使った条件分岐の方法は、ルート名取得して比較する方法と、ルート名が指定したルートか判定するメソッドを使う方法がある。

また、ファサード(Request::Route::)を使う方法と依存注入で渡されたリクエスト($request)を使う方法がある。


ルート名を取得して比較する

ルート名を取得する方法

ルート名を取得する方法はいくつかある。以下はどれを使っても同じ。

Request::route()->getName()
Route::currentRouteName()
Route::getCurrentRoute()->getName()

RequestファサードかRouteファサードを使っている。それぞれのファサードで使えるメソッドが異なる。

構文はファサード名::メソッド1->メソッド2->メソッド3,,,

実例

.blade.php
<div>ルート名1{{ Request::route()->getName() }}</div>
<div>ルート名2{{ Route::currentRouteName() }}</div>
<div>ルート名3{{ Route::getCurrentRoute()->getName() }}</div>

↓ ブラウザの表示

image.png

ルート名を使った条件分岐

if文の中でルート名を比較すれば条件分岐ができる。

@if( Route::currentRouteName() === 'ルート名' )

実例

.blade.php
@if ( Route::currentRouteName() === 'user.show' )
  <p>true</p>
@else
  <p>false</p>
@endif

↓ ブラウザの表示

image.png


指定したルート名か判定する

routeIsメソッドを使うと指定したルート名か判定できる。

Request::routeIs('ルート名')

指定したルート名に一致する場合は1が返る。一致しない場合は空(null)が返る。

実例

.blade.php
<div>routeIs1{{ Request::routeIs('user.show') }}</div>
<div>routeIs2{{ Request::routeIs('false') }}</div>

↓ブラウザの表示

image.png



if文の中で使えば簡単に条件分岐ができる。

.blade.php
@if ( Request::routeIs('user.show') )
  <p>true</p>
@else
  <p>false</p>
@endif


$requestを使う方法

これまでのRequest::の部分を$requestで表記することもできる。

この場合はコントローラでRequestを依存注入し、ビューに変数$reqeustとして渡す必要がある。

▼依存注入の例

UserController.php
class UserController extends Controller
{
    public function show(int $user_id, Request $request){
        return view('user.show', [ 'id'=>$user_id, 'request' => $request ]);
    }
}
アクション名(Request $request){}

依存注入。これで、ページに渡されたリクエストの情報を$requestとして関数の中で使える。

view('ビュー名', [ 'request' => $request ])

ビューにデータを渡すには第2引数で指定する。これでビューの中で$requestが使えるようになる。


ルート名を取得する

Request::route()->getName()

↓ 同じ

$request->route()->getName()

 

ルート名に一致するか調べる

Request::routeIs('ルート名')

↓ 同じ

$request->routeIs('ルート名')



以上。

5
7
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
5
7