Controller では public function update(LinkRequest $request, $id) のように 引数に ID が ありますが

FormRequest 内の バリデーション処理では public function rules() のように 引数が ないということ

では どのように IDを 取得して 自分自身を 除外するか 悩みました…

バリデーション 8.x Laravel
https://readouble.com/laravel/8.x/ja/validation.html

を 見ると

  • Rule::unique(‘users’)->ignore($this->id)

という 例があり

Googleで検索しても

  • Rule::unique(‘テーブル名’)->ignore(テーブルの主キー)

で 除外できる と 書かれているのが 多いのですが

私には 理解 & 解決 出来ませんでした…


なので 情報を 探したところ

【Laravel】RequestでURLのパラメータを取得する | Technote
https://technote.space/posts/wpdb-laravel-get-url-parameter/

Laravelのフォームリクエストバリデーションのuniqueで除外IDを指定する :: ezaki3
https://eza-s.com/blog/archives/73/

に 行き着きました


結局どうやって取得するのか?


まずは ルートの情報を確認し 必要な情報を確認します

php artisan route:list

で すべてのルートを出力すると

DomainMethodURINameActionMiddleware
GET|HEADlinkslinks.indexApp\Http\Controllers\LinkController@indexweb
POSTlinkslinks.storeApp\Http\Controllers\LinkController@storeweb
GET|HEADlinks/createlinks.createApp\Http\Controllers\LinkController@createweb
PUT|PATCHlinks/{link}links.updateApp\Http\Controllers\LinkController@updateweb
DELETElinks/{link}links.destroyApp\Http\Controllers\LinkController@destroyweb
GET|HEADlinks/{link}/editlinks.editApp\Http\Controllers\LinkController@editweb
※ Linls だけ 抜粋

の 様に 出力されます

ここで 出てくる {link}ignore($this->link) に なります


ドキュメント にも 書かれていたんだろうけど 前後関係等で 探せなくて 時間を食ってしまいました

Related Article

[ はじめて の Laravel ] リンク一覧ページ を 作る No.2

詳細へ »

[ はじめて の Laravel ] リンク一覧ページ を 作る No.4

詳細へ »

[ はじめて の Laravel ] リンク一覧ページ を 作る No.5

詳細へ »