はじめに
以前、作成した問い合わせフォームに入力チェックを追加する readouble.com
フォームリクエストの作成
$ php artisan make:request StoreContactForm
- 作成したフォームリクエストはApp\Http\Requestのフォルダの直下に作成される
- 下記のファイルに入力チェックを条件を指定する
- 入力チェックをパイプランで指定する
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StoreContactForm extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return false; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ // 'name' => 'required|string|max:20', 'email' => 'required|email|unique:users|max:255', 'url' => 'url|nullable', 'age' => 'required', 'sex' => 'required', 'subject' => 'required|string|max:50', 'description' => 'required|string|max:1000', 'caution' => 'required', ]; } }
補足
下記の「 This action is unauthorized. 」というエラーメッセージが表示された場合
下記のauthorizeのメソッドの戻り値をtrueに変更する
class StoreContactForm extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; }
フォームリクエストをコントローラーに指定する
- RequestクラスをStoreContactFormクラスに変更する
/** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(StoreContactForm $request) { // $contact = new ContactForm; $contact->name = $request->input('name'); $contact->email = $request->input('email'); $contact->url = $request->input('url'); $contact->sex = $request->input('sex'); $contact->age = $request->input('age'); $contact->subject = $request->input('subject'); $contact->description = $request->input('description'); $contact->save(); return redirect('contact/index'); }
View側にエラーメッセージを表示する処理を実装する
- 下記の処理をエラーを表示したい個所に埋め込む
@if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
動作確認
補足
- エラーメッセージを英語から日本語に変えたい場合、resource/lang/ja/validation.phpファイルに記述する
'attributes' => [ 'name' => '名前', 'email' => 'メールアドレス', 'age' => '年齢', 'sex' => '性別', 'subject' => '件名', 'description' => '詳細', 'caution' => '注意事項', 'password' => 'パスワード' ],