0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravel カスタムバリデーション追加

Posted at

Laravel5.5
PHP7

入力フォームにバリデーションを設定するとき、
laravelのバリデーションルールでは、うまく設定できない。
そんな時、独自のバリデーションを作成して適用させようと思いました。

その時に構築した方法を以下に記載します。

下記は、
フォームで役職を設定し、そのバリデーションするためのコードです。
下記のバリデーションを設定しようとしています。
①入力必須、数値
②数値はconfig.positionに設定されている値のみ

①は、rulesにバリデーションを設定するだけです。

②には、laravelのバリデーションルールでは設定できないので独自のバリデーションを設定します。

PositionRequest.php
<?php

namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;

class PositionRequest 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
	 */
	public function rules()
	{
		return [
			'postion' => 'required|integer',
		];
	}

	// 役職のバリデーション
	public function withValidator($validator) {
		$validator->after(function ($validator) {
			if (!in_array($this->position, config('common.position'))) {
				$validator->errors()->add('position', '役職を正しく選択してください。');
			}
		});
	}
}
config/common.php
'position' => [
    '社員' => 10,
    '係長' => 20,
    '課長' => 30,
    '部長' => 40,
    '社長' => 50,
],

公式に記載されている方法でコードを書きます。
https://readouble.com/laravel/5.5/ja/validation.html

.php
public function withValidator($validator) {
	$validator->after(function ($validator) {
		//ここに処理を記載する。
	});
}

今回は、config/common.php内のpositionに設定している値以外は、
エラー表示を行うバリデーションを設定します。

.php
if (!in_array($this->position, config('common.position'))) {
    $validator->errors()->add('position', '役職を正しく選択してください。');
}
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?