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

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

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

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


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



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

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

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

**▼ルーティング例**

```php: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アクションに飛ばす。



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

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

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


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

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

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


###実例

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

 ↓　ブラウザの表示

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/35193f34-6bc9-84b1-264c-dc4256e0ca4a.png)|
|:--|


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

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


####実例

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

 ↓　ブラウザの表示

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/9989227d-4965-c13c-73da-8731d67e8610.png)|
|:--|


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

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

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

###実例

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

 ↓ブラウザの表示

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/27d53e89-e2e9-3c15-4ff3-5dd2291b5acb.png)|
|:--|

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

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


<br>
##`$request`を使う方法
これまでの`Request::`の部分を`$request`で表記することもできる。

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


####▼依存注入の例

```php: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 ])`
ビューにデータを渡すには第２引数で指定する。これでビューの中で`$request`が使えるようになる。

<br>
##ルート名を取得する

```
Request::route()->getName()
```

↓　同じ

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

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

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

↓　同じ

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


<br>
以上。