수색…
매개 변수
매개 변수 | 세부 |
---|---|
필수 | 입력란은 필수 항목입니다. |
때때로 | 해당 필드가 입력 배열에있는 경우에만 필드에 대해 유효성 검사 검사를 실행합니다. |
이메일 | 입력이 유효한 이메일입니다. |
최대 값 : 값 | 입력 값은 최대 값보다 작아야합니다. |
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|PATCH
및 POST
유효성 검사 규칙이 동일 할 필요는 없습니다. 요구 사항에 맞는 논리를 정의하십시오. 이 기술을 사용하면 사용자 지정 양식 요청 클래스에서 정의한 사용자 지정 메시지를 다시 사용할 수 있습니다.
오류 메시지
오류 메시지 사용자 정의
/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:+'
]);