【Laravel】RequestでURLのパラメータを取得する

プログラミング

きっかけ

LaravelでapiResourceを使用してCRUD用のAPIルートを設定した場合、以下のようになります。

MethodURIName
GET|HEADapi/teststests.index
POSTapi/teststests.store
GET|HEADapi/tests/{test}tests.show
PUT|PATCHapi/tests/{test}tests.update
DELETEapi/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 に渡すこともできますが、自動でバリデーションする時点で使用したい場合はその方法をとることができません。

解決方法

$this->route($param)

$param には 設定したパラメータ名を指定します。

例えばURIが以下の場合は test で {test} に渡された値を取得できます。

api/tests/{test}

またマジックメソッドも実装されており、上の例では

$this->test

でも取得可能です。

コメント

タイトルとURLをコピーしました