【Laravel】RequestでURLのパラメータを取得する
きっかけ
LaravelでapiResourceを使用してCRUD用のAPIルートを設定した場合、以下のようになります。
Method | URI | Name |
GET|HEAD | api/tests | tests.index |
POST | api/tests | tests.store |
GET|HEAD | api/tests/{test} | tests.show |
PUT|PATCH | api/tests/{test} | tests.update |
DELETE | api/tests/{test} | tests.destroy |
例えばコントローラであれば以下のようにすることで {test} の部分である更新対象のIDを取得できます。
public function update(Request $request, $id)
Laravelはサービスコンテナという強力なDI機能があり、 FormRequest を拡張して更新用にバリデーションを行う実装を持たせた UpdateRequest などを作成し以下のように使用することで、このメソッドが呼ばれるときに自動でインスタンスを作成し、バリデーションを実行してくれるようになります。
public function update(UpdateRequest $request, $id)
この UpdateRequest の中でさらに $id を使ってバリデーションなどを実行したい場合に、コントローラで受け取った $id を $request に渡すこともできますが、自動でバリデーションする時点で使用したい場合はその方法をとることができません。
解決方法
Request の route メソッドで取得可能です。
Request を拡張したクラス内で以下のように使用します。
$this->route($param)
$param には 設定したパラメータ名を指定します。
例えばURIが以下の場合は test で {test} に渡された値を取得できます。
api/tests/{test}
$this->route('test')
またマジックメソッドも実装されており、上の例では
$this->test
でも取得可能です。
【Vue.js】i18n をテンプレート以外から利用する
JavaScript でオブジェクトの配列の特定のキーの値を使用してオブジェクトに変換する