【Laravel】Controllerのコンストラクタのタイミングでルートパラメータを取得する方法
こんにちは、スズキです。
今回はLaravelでControllerのコンストラクタのタイミングでルートパラメータを取得する方法を紹介します。
例えば、routes.phpのルート設定、及び、Controllerの設定が以下のようになっていたとします。
●routes.php
この場合、「http://test.co.jp/kyoto/」のようなURLにアクセスした場合には、indexメソッドが呼ばれたタイミングでメソッド引数の$prefecture_slugに「kyoto」のような値が既に入っているため、indexメソッド内ではルートパラメータ値をそのまま利用することができます。
しかし、コンストラクタのタイミングではメソッド引数にルートパラメータがないので、直接ルートパラメータ値を利用することができません。
でも、コンストラクタで共通処理を行う際にルートパラメータを使用したい場合ってありますよね?
そんなときはRouterクラスを用いることでルートパラメータを取得することができます。
これでコンストラクタのタイミングでもルートパラメータを取得することができました。
続編
今回は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)
{
// 〜〜略〜〜 //
}
}
これでコンストラクタのタイミングでもルートパラメータを取得することができました。
続編