開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. PHP >
  4. Laravel >
  5. 【Laravel】Controllerのコンストラクタのタイミングでルートパラメータを取得する方法
no-image

【Laravel】Controllerのコンストラクタのタイミングでルートパラメータを取得する方法

こんにちは、スズキです。

今回はLaravelでControllerのコンストラクタのタイミングでルートパラメータを取得する方法を紹介します。


例えば、routes.phpのルート設定、及び、Controllerの設定が以下のようになっていたとします。

●routes.php
Route::group(['prefix' => '{prefecture_slug}'], function(){
    Route::get('/', ['uses' => 'Test\PrefectureController@index', 'as' => 'test.prefecture.index' ]);
});
PrefectureController.php
class PrefectureController extends Controller
{
    public function __construct()
    {
        // 〜〜略〜〜 //
    }
    
    public function index($prefecture_slug)
    {
        // 〜〜略〜〜 //
    }
}

この場合、「http://test.co.jp/kyoto/」のようなURLにアクセスした場合には、indexメソッドが呼ばれたタイミングでメソッド引数の$prefecture_slugに「kyoto」のような値が既に入っているため、indexメソッド内ではルートパラメータ値をそのまま利用することができます。

しかし、コンストラクタのタイミングではメソッド引数にルートパラメータがないので、直接ルートパラメータ値を利用することができません。

でも、コンストラクタで共通処理を行う際にルートパラメータを使用したい場合ってありますよね?
そんなときはRouterクラスを用いることでルートパラメータを取得することができます。
use Illuminate\Routing\Router;

class PrefectureController extends Controller
{
    public function __construct(Router $router)
    {
        // ルートパラメータを取得する
        $routeParamName = 'prefecture_slug';
        $defaultValue = null;
        $routeParam = $router->getCurrentRoute()->getParameter($paramName, $defaultValue)
        
        // 全てのルートパラメータを取得したい場合は以下のようにする
        $allRouteParams = $router->getCurrentRoute()->parameters();
    }
    
    public function index($prefecture_slug)
    {
        // 〜〜略〜〜 //
    }
}

これでコンストラクタのタイミングでもルートパラメータを取得することができました。

続編
TOPに戻る