[ はじめて の Laravel ] リンク一覧ページ を 作る No.4.5 – フォームリクエスト の バリデーション で 躓いた 小話
[jr_post_date]
Controller では public function update(LinkRequest $request, $id) のように 引数に ID が ありますが
FormRequest 内の バリデーション処理では public function rules() のように 引数が ないということ
では どのように IDを 取得して 自分自身を 除外するか 悩みました…
[jr_external_link title=”バリデーション 8.x Laravel” url=”https://readouble.com/laravel/8.x/ja/validation.html”]
を 見ると
- Rule::unique(‘users’)->ignore($this->id)
という 例があり
Googleで検索しても
- Rule::unique(‘テーブル名’)->ignore(テーブルの主キー)
で 除外できる と 書かれているのが 多いのですが
私には 理解 & 解決 出来ませんでした…
なので 情報を 探したところ
[jr_external_link title=”【Laravel】RequestでURLのパラメータを取得する | Technote” url=”https://technote.space/posts/wpdb-laravel-get-url-parameter/”]
と
[jr_external_link title=”Laravelのフォームリクエストバリデーションのuniqueで除外IDを指定する :: ezaki3″ url=”https://eza-s.com/blog/archives/73/”]
に 行き着きました
[jr_heading_1]結局どうやって取得するのか?[/jr_heading_1]
まずは ルートの情報を確認し 必要な情報を確認します
php artisan route:list
で すべてのルートを出力すると
| Domain | Method | URI | Name | Action | Middleware |
|---|---|---|---|---|---|
| GET|HEAD | links | links.index | App\Http\Controllers\LinkController@index | web | |
| POST | links | links.store | App\Http\Controllers\LinkController@store | web | |
| GET|HEAD | links/create | links.create | App\Http\Controllers\LinkController@create | web | |
| PUT|PATCH | links/{link} | links.update | App\Http\Controllers\LinkController@update | web | |
| DELETE | links/{link} | links.destroy | App\Http\Controllers\LinkController@destroy | web | |
| GET|HEAD | links/{link}/edit | links.edit | App\Http\Controllers\LinkController@edit | web |
の 様に 出力されます
ここで 出てくる {link} が ignore($this->link) に なります
ドキュメント にも 書かれていたんだろうけど 前後関係等で 探せなくて 時間を食ってしまいました