[ はじめて の Laravel ] リンク一覧ページ を 作る No.4.5 – フォームリクエスト の バリデーション で 躓いた 小話
この記事は 2021年 11月 26日 に書かれた記事です。
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
で すべてのルートを出力すると
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)
に なります
ドキュメント にも 書かれていたんだろうけど 前後関係等で 探せなくて 時間を食ってしまいました