수색…


매개 변수

매개 변수 세부
필수 입력란은 필수 항목입니다.
때때로 해당 필드가 입력 배열에있는 경우에만 필드에 대해 유효성 검사 검사를 실행합니다.
이메일 입력이 유효한 이메일입니다.
최대 값 : 값 입력 값은 최대 값보다 작아야합니다.
unique : db_table_name 입력 값은 제공된 데이터베이스 테이블 이름에서 고유해야합니다.
받아 들인 예 / On / 1 TOS 확인에 유용합니다.
active_url checkdnsrr 에 따라 유효한 URL이어야합니다.
이후 : 날짜 유효성 검사중인 필드는 주어진 날짜 이후의 값을 제공해야합니다.
알파 유효성 검사를받는 필드는 완전히 영문자 여야합니다.
알파 _ 대시 유효성 검사를받는 필드는 영숫자 문자와 대시 및 밑줄을 포함 할 수 있습니다.
알파 _ 넘버 유효성 검사를받는 필드는 전적으로 영숫자 여야합니다.
정렬 PHP 배열 이어야합니다.
before : date 입력란은 지정된 날짜의 값이어야합니다.
between : 최소, 최대 입력 값은 최소값 (최소값)과 최대 값 (최대 값) 사이에 있어야합니다.
부울 유효성 검사를받는 필드는 부울로 캐스팅 할 수 있어야합니다. 허용되는 입력은 true , false , 1 , 0 , "1""0" 입니다.
확인 된 유효성 검사중인 필드는 foo_confirmation 일치하는 필드를 foo_confirmation 합니다. 예를 들어 유효성 검사중인 필드가 password 인 경우 일치하는 password_confirmation 필드가 입력에 있어야합니다.
날짜 유효성 검사중인 필드는 strtotime PHP 함수에 따라 유효한 날짜 여야합니다.
정수 유효성 검사중인 필드는 정수 여야합니다.
유효성 검사를받는 필드는 문자열 유형이어야합니다.

기본 예제

validate 메소드 ( ValidatesRequests 특성에 의해 제공되는 기본 컨트롤러에서 사용 가능)를 사용하여 요청 데이터의 validate 할 수 있습니다.

규칙이 지키면 코드는 계속 정상적으로 실행됩니다. 그러나 유효성 검사가 실패하면 유효성 검사 오류가 포함 된 오류 응답이 자동으로 다시 전송됩니다.

  • 일반적인 HTML 양식 요청의 경우 양식은 제출 된 값을 유지하면서 이전 페이지로 리디렉션됩니다.
  • JSON 응답을 기대하는 요청의 경우 코드 422의 HTTP 응답이 생성됩니다.

예를 들어, UserController 에서 store 메소드에 새 사용자를 저장하는 경우 store 전에 유효성 검사가 필요할 수 있습니다.

/**
 * @param  Request  $request
 * @return Response
 */
public function store(Request $request) {
    $this->validate($request, [
        'name' => 'required',
        'email' => 'email|unique:users|max:255'
    ],
    // second array of validation messages can be passed here
    [
        'name.required' => 'Please provide a valid name!',
        'email.required' => 'Please provide a valid email!',
    ]);

    // The validation passed
}

위의 예에서 name 필드가 비어 있지 않은 값으로 존재하는지 확인합니다. 둘째, email 필드가 유효한 전자 메일 형식이고 데이터베이스 테이블 "users"에서 고유하며 최대 길이가 255 자인지 확인합니다.

| (파이프) 문자는 한 필드에 대해 서로 다른 유효성 검사 규칙을 결합합니다.

때로는 첫 x 째 유효성 검증 실패 후에 속성에 대한 유효성 검증 룰 실행을 중지 할 수도 있습니다. 이렇게하려면 bail 규칙을 속성에 지정하십시오.

$this->validate($request, [
    'name' => 'bail|required',
    'email' => 'email|unique:users|max:255'
]);

사용 가능한 유효성 검사 규칙의 전체 목록은 아래매개 변수 섹션 에서 확인할 수 있습니다.

배열 유효성 검사

배열 양식 입력 필드의 유효성 검사는 매우 간단합니다.

지정된 배열에서 각 이름, 전자 메일 및 아버지 이름의 유효성을 검사해야한다고 가정합니다. 당신은 다음을 할 수 있습니다 :

$validator = \Validator::make($request->all(), [
    'name.*'       => 'required', 
    'email.*'      => 'email|unique:users',
    'fatherName.*' => 'required'
]);

if ($validator->fails()) {
    return back()->withInput()->withErrors($validator->errors());
}

Laravel은 유효성 검사를 위해 기본 메시지를 표시합니다. 그러나 배열 기반 필드에 대한 사용자 지정 메시지를 원하는 경우 다음 코드를 추가 할 수 있습니다.

[
    'name.*' => [
        'required' => 'Name field is required',
    ],
    'email.*' => [
        'unique'   => 'Unique Email is required',
    ],
    'fatherName.*' => [
        'required' => 'Father Name required',
    ]
]

최종 코드는 다음과 같습니다.

$validator = \Validator::make($request->all(), [
    'name.*'       => 'required', 
    'email.*'      => 'email|unique:users',
    'fatherName.*' => 'required',
], [
    'name.*'       => 'Name Required',
    'email.*'      => 'Unique Email is required',
    'fatherName.*' => 'Father Name required',
]);

if ($validator->fails()) {
    return back()->withInput()->withErrors($validator->errors());
}

기타 검증 접근법

1) 양식 요청 확인

응용 프로그램의 특정 요청에 대한 권한 부여 논리, 유효성 검사 규칙 및 오류 메시지를 보관할 수있는 "양식 요청"을 만들 수 있습니다.

make:request Artisan CLI 명령은 클래스를 생성하고이를 app/Http/Requests 디렉토리에 저장합니다.

php artisan make:request StoreBlogPostRequest

authorize 메소드는이 요청에 대한 권한 부여 논리로 겹쳐 쓸 수 있습니다.

public function authorize()
{        
    return $this->user()->can('post');
}

rules 메서드는이 요청에 대한 특정 규칙으로 재정의 될 수 있습니다.

public function rules()
{
    return [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ];
}

messages 메서드는이 요청에 대한 특정 메시지로 재정의 될 수 있습니다.

public function messages()
{
    return [
        'title.required' => 'A title is required',
        'title.unique' => 'There is another post with the same title',
        'title.max' => 'The title may not exceed :max characters',
        'body.required' => 'A message is required',
    ];
}

요청을 확인하려면 해당 컨트롤러 메소드에 특정 요청 클래스를 입력하십시오. 유효성 검사가 실패하면 오류 응답이 다시 전송됩니다.

public function store(StoreBlogPostRequest $request)
{
    // validation passed
}

2) 검사기를 수동으로 작성하기

유연성을 높이려면 수동으로 유효성 검사기를 만들고 실패한 유효성 검사를 직접 처리해야 할 수 있습니다.

<?php    
namespace App\Http\Controllers;

use Validator;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class PostController extends Controller
{
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ]);

        if ($validator->fails()) {
            return redirect('post/create')
                    ->withErrors($validator)
                    ->withInput();
        }

        // Store the blog post...
    }
}

2) 유창하게 규칙 만들기

때로는 서비스 제공자 내에서 boot() 메소드로 작업하는 고유 한 규칙을 맨 위에 작성해야 할 수도 있습니다. Laravel 5.4에서는 Rule 클래스를 사용하여 유창하게 새로운 규칙을 작성할 수 있습니다.

예를 들어, 사용자를 삽입하거나 업데이트 할 때 UserRequest 를 사용하여 작업 할 것입니다. 지금은 이름이 필요하고 전자 메일 주소는 고유해야합니다. unique 규칙을 사용할 때의 문제점은 사용자를 편집하는 경우 동일한 전자 메일을 보관할 수 있으므로 규칙에서 현재 사용자를 제외시켜야한다는 것입니다. 다음 예제에서는 새 Rule 클래스를 사용하여 쉽게 수행 할 수있는 방법을 보여줍니다.

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;

class UserRequest 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(Request $request)
    {
        $id = $request->route()->getParameter('user');

        return [
            'name'           =>  'required',
            
            // Notice the value is an array and not a string like usual
            'email'         =>  [
                'required',
                Rule::unique('users')->ignore($id)
            ]
        ];
    }
}

POST, PUT, PATCH에 대한 단일 폼 요청 클래스

'폼 요청 유효성 검사' 예제에 따라 동일한 요청 클래스를 POST , PUT , PATCH 사용할 수 있으므로 동일하거나 유사한 유효성 검사를 사용하여 다른 클래스를 만들 필요가 없습니다. 고유 한 테이블의 속성이있는 경우 유용합니다.

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules() {
    switch($this->method()) {
        case 'GET':
        case 'DELETE':
            return [];
        case 'POST':
            return [
                'name'     => 'required|max:75|unique',
                'category' => 'required',
                'price'    => 'required|between:0,1000',
            ];
        case 'PUT':
        case 'PATCH':
            return [
                'name'     => 'required|max:75|unique:product,name,' . $this->product,
                'category' => 'required',
                'price'    => 'required|between:0,1000',
            ];
        default:break;
    }
}

위에서부터 시작하여 switch 문은 요청의 메소드 유형 ( GET , DELETE , POST , PUT , PATCH )을 살펴볼 것입니다.

메서드에 따라 정의 된 규칙 배열을 반환합니다. 예제의 name 필드와 같이 고유 한 필드가있는 경우 무시할 유효성 검사에 대한 특정 ID를 지정해야합니다.

'field_name' => 'unique:table_name,column_name,' . $idToIgnore`

id 아닌 다른 레이블이 붙은 기본 키가있는 경우 기본 키 열을 네 번째 매개 변수로 지정합니다.

'field_name' => 'unique:table_name,column_name,' . $idToIgnore . ',primary_key_column'

이 예에서는 PUT 을 사용하고 경로 ( admin/products/{product} )에 제품 ID의 값을 전달합니다. 따라서 $this->product 는 무시할 id 와 같습니다.

이제 PUT|PATCHPOST 유효성 검사 규칙이 동일 할 필요는 없습니다. 요구 사항에 맞는 논리를 정의하십시오. 이 기술을 사용하면 사용자 지정 양식 요청 클래스에서 정의한 사용자 지정 메시지를 다시 사용할 수 있습니다.

오류 메시지

오류 메시지 사용자 정의

/resources/lang/[lang]/validation.php 파일에는 유효성 검사기에서 사용할 오류 메시지가 들어 있습니다. 필요에 따라 편집 할 수 있습니다.

대부분은 오류 메시지를 생성 할 때 자동으로 대체되는 자리 표시자를 가지고 있습니다.

예를 들어, 'required' => 'The :attribute field is required.' :attribute 자리 표시자는 필드 이름으로 바뀝니다 (또는 동일한 파일의 attributes 배열에있는 각 필드의 표시 값을 사용자 정의 할 수도 있습니다).

메시지 구성 :

'required' => 'Please inform your :attribute.',
//...
'attributes => [
    'email' => 'E-Mail address'
]

규칙 :

`email' => `required`

결과 오류 메시지 :

"이메일 주소를 알려주십시오."


요청 클래스 내의 오류 메시지 사용자 정의

Request 클래스는 배열을 반환해야하는 messages() 메서드에 대한 액세스 권한을 가지며 lang 파일을 사용하지 않고도 메시지를 재정의하는 데 사용할 수 있습니다. 예를 들어 사용자 정의 file_exists 유효성 검사가있는 경우 아래와 같은 메시지를 사용할 수 있습니다.

class SampleRequest extends Request {

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'image' =>  'required|file_exists'
        ];
    }

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

    public function messages()
    {
        return [
            'image.file_exists' =>  'That file no longer exists or is invalid'
        ];
    }

}

오류 메시지 표시

유효성 검사 오류는 세션에 플래시되며 $errors 변수에서도 사용할 수 있습니다. $errors 변수는 모든보기에 자동으로 공유됩니다.

블레이드보기에 오류를 표시하는 예 :

@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

사용자 지정 유효성 검사 규칙

사용자 지정 유효성 검사 규칙을 만들려면 유효성 검사기 외관을 통해 서비스 공급자의 boot 메서드에서 지정할 수 있습니다.

<?php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Validator;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Validator::extend('starts_with', function($attribute, $value, $parameters, $validator) {
            return \Illuminate\Support\Str::startsWith($value, $parameters[0]);
        });

        Validator::replacer('starts_with', function($message, $attribute, $rule, $parameters) {
            return str_replace(':needle', $parameters[0], $message);
        });
    }
}

extend 메서드는 규칙의 이름이 될 문자열과 속성의 이름, 유효성이 검사되는 값, 규칙 매개 변수의 배열 및 유효성 검사기 인스턴스를 차례로 전달하는 함수를 사용하며, 유효성 검사가 통과됩니다. 이 예에서는 값 문자열이 주어진 하위 문자열로 시작하는지 확인합니다.

이 사용자 지정 규칙에 대한 오류 메시지는 /resources/lang/[lang]/validation.php 파일에 평소대로 설정 될 수 있으며 매개 변수 값과 같은 자리 표시자를 포함 할 수 있습니다.

'starts_with' => 'The :attribute must start with :needle.'

replacer 메소드는 규칙의 이름 인 문자열과 교체 전의 원래 메시지, 속성 이름, 규칙 이름 및 규칙 매개 변수의 배열을 차례로 전달하는 함수를 사용합니다. 필요에 따라 자리 표시자를 바꾼 후에 메시지를 반환해야합니다.

이 규칙을 다른 규칙과 같이 사용하십시오.

$this->validate($request, [
    'phone_number' => 'required|starts_with:+'
]);


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow