0
0

【Laravel】バリデーションの作成

Posted at

システム開発を行う上でバリデーションは必須の機能になります。
今回はそのバリデーションの書き方について説明していきます。

開発環境
・PHP8.0.8
・Laravel 9.52.8
・MacOS M1チップ

なぜバリデーションが必要なのか

そもそもバリデーションとはユーザーによって開発者の期待しない値が送信されたときにその入力値によってバグがおきないように事前に入力制御するものです。
通常だとバリデーションされた値はデータベース上に登録されず、再度ユーザーに入力を促します。

バリデーションの作成

バリデーションを行うためのファイルを下記コマンドを使用して作成していきます。
作成後はapp/Http/Requestsフォルダに作成したファイルが作成されています。

php artisan make:request SampleFormRequest(ファイル名)

バリデーションの書き方

SampleFormRequest.php
namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

lass SampleFormRequest extends FormRequest
{

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, mixed>
     */
    public function rules()
    {
        return [
            'name' => 'required|max:255',
            'email' => 'required|email|unique:users|max:255'
          ];
    }
}

バリデーションの条件としてはrules()の returnの中に記述していきます。
例えばrequiredは必須入力を促すバリデーション、max:255は入力文字数の制限をするなどがあります。
その他のルールに関しては下記URLを参考にしてください。

ルール参照:https://readouble.com/laravel/8.x/ja/validation.html

Controller

SampleController.php
public function sampleShow(SampleFormRequest $request)
    {
        $validated = $request->validated();

        return redirect('index');
    }

Controlllerには引数としてSampleFormRequest(バリデーション)を記載します。
$request->validated() でバリデーションを行います。

view

@if ($errors->has('name'))
<div>
{{ $errors->first('name') }}
</div>
@endif

各入力フォームに対して特定のメッセージを出した方がユーザーにとってはわかりやすいですよね!
$errors->has('項目名')  を記載し、$errors->first('name')で実際のエラーメッセージを
出力します。

まとめ

今回はバリデーションについて説明しました。
バリデーションは本来バックエンドで行います。
フロントでもバリデーションのような入力制御は可能ですが、フロントでは悪意のあるユーザー側がいくらでも入力値を操作できるため、フロントのみの制御のみだと不安です。
そのためにバックエンドでしっかりとバリデーションを行い、アプリケーションを正しく運用する必要があります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0