【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) { // 〜〜略〜〜 // } }
これでコンストラクタのタイミングでもルートパラメータを取得することができました。
続編