バリデーションを簡単に安全にかけるための方法メモ。
フォームリクエスト
バリデーション専用のフォルダを作って処理をさせる。
書きコマンドを打ってrequestフォルダとファイルを作成。
php artisan make:request StoreContactForm
ファイル名は任意。
Controller
controller内にフォルダとファイルが出来てるはずなので確認。
Controller/Requests/StoreContactForm.php
public function authorize()
{
return true; //falseからtrueに変更
}
.
.
.
public function rules()
{
return [
//ここにバリデーションのルールを書く
'name' => 'required|string|max:20',
'title' => 'required|string|max:50',
'email' => 'required|email|unique:users|max:255',
'gender' => 'required',
'contact' => 'required|accepted',
];
}
ルールは公式参照。
【https://readouble.com/laravel/7.x/ja/validation.html#rule-url】
作成したデータを送る際に表示させたいので、storeメソッドに適応してあげる。
ContactFormController.php
//バリデーションのファイルを呼び出し
use App\Service\CheckFormData;
//第一引数をRequestからバリデーションクラス名にする
public function store(StoreContactForm $request)
{
$contact = new ContactForm;
$contact->name = $request->input('name');
$contact->email = $request->input('email');
$contact->title = $request->input('title');
$contact->gender = $request->input('gender');
$contact->contact = $request->input('contact');
$contact->save();
return redirect('contacts/index');
}
View
エラーメッセージを表示します。
create.blade.php
@if($errors->any())
<ul>
@foreach($errors->all() as $error)
<li class="list-group-item list-group-item-danger">{{$error}}</li> @endforeach
</ul>
@endif
$errorsはViewファイルに与えられてる変数らしいです。
こいつを回してあげて該当するもののみ表示します。
まとめ
バリデーションは最初ややこしい印象があるのですが、大事な部分でもあるので徐々に慣れていきたいです。