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', '役職を正しく選択してください。');
}