フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

Laravel バリデーションチェック

はじめに

以前、作成した問い合わせフォームに入力チェックを追加する readouble.com

フォームリクエストの作成

  • フォームリクエストは、バリデーションロジックを含んだカスタムリクエストクラスです。 -フォームリクエストクラスを作成するには、make:request Artisan CLIコマンドを使用します。
$ 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. 」というエラーメッセージが表示された場合 f:id:PX-WING:20201023002019p:plain

  • 下記の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

動作確認

f:id:PX-WING:20201023003754p:plain

補足

  • エラーメッセージを英語から日本語に変えたい場合、resource/lang/ja/validation.phpファイルに記述する
    'attributes' => [
        'name' => '名前',
        'email' => 'メールアドレス',
        'age' => '年齢',
        'sex' => '性別',
        'subject' => '件名',
        'description' => '詳細',
        'caution' => '注意事項',
        'password' => 'パスワード'
    ],