MUGIJIRU.JP

Webエンジニアの雑談ブログ

Laravel5.2 RouterとRoute

ルーティングのパラメータの取り方を時々忘れてしまいますので、
備忘録としてたまに使うものを記載しておこうと思います。

前提知識

RouterとRoute

Router

Routerクラスのファサードは「Route」と命名されています。
お馴染みのroutes.phpで利用している「Route:: ***」の実体で、ざっくり言えば経路全体の管理を行うオブジェクトです。
Routerのソースは「Illuminate\Routing\Router.php」です。
この「Route」というファサードの命名が曲者で、Routerの子として扱われる「Route」クラスが別にあるので
混ざってややこしい
です(言ってるそばからややこしいですね)

Route

経路そのものを表現するオブジェクトです。
ソースは「Illuminate\Routing\Route.php」です。

それぞれ、いろんなメソッドがあるので覗いてみると面白いです。

名前付きルーティングを活用しているとき忘れがちな諸々

Router, Routeオブジェクトでたまに使う

<?php
// Routerから現在の名前を取る
$route_name = Route::getCurrentRouteName();
// Routeインスタンスから直接名前を取る
$route_name = $route->getName();

// Routerで今表示しているページのルーティングが「'mypage.dashboard'」か判定する
$bool = Route::is('mypage.dashboard');
// ワイルドカードも使える
$bool = Route::is('mypage.*'); 

// Routeインスタンスからルーティングパラメータを取る(RouteModelBindingしている場合はインスタンスで取れる)
$param = $route->paremeter('hoge');
$param = $route->getParameter('hoge'); // 上記のエイリアス
// パラメータを持っているかどうかも確認できる
$bool = $route->hasParameter('hoge'); // hogeを受けるようになっているか
$bool = $route->hasParameters(); // なんらかパラメータを受けるようになっているか

現在のリクエストのRouteの取り方

<?php
/**
 * 下記は全部同じインスタンスを取ります
 * 
 */
// Routerのファサードから
$route = \Route::current();
$route = \Route::getCurrentRoute(); // 上記メソッドのエイリアス
// Requestのファサードから
$route = \Request::route();
// controller等で自動解決されたrequestインスタンスから
$route = $request->route();

/**
 * (補足)ちなみにRouterからRequestインスタンスを取る事もできます
 *
 */
$request = Route::getCurrentRequest();

単語で捉えているとファサードの命名のせいで混乱するので、Routerに用があるのか、Routeに用があるのかを認識したうえで
問い合わせしていくことが大切ですね。