Laravel: 다른 필드보다 커야 하는 정수 필드의 유효성을 검사합니다.
두 개의 필드가 모두 없는 경우에만 선택할 수 있습니다.
$rules = [
'initial_page' => 'required_with:end_page|integer|min:1|digits_between: 1,5',
'end_page' => 'required_with:initial_page|integer|min:2|digits_between:1,5'
];
지금이다,end_page
다음보다 커야 합니다.initial_page
이 필터는 어떻게 포함됩니까?
그 질문은 2015년에 나왔기 때문에 현재 대부분의 답변들도 구식입니다.
새로운 버전에 포함된 라벨 팀에서 제공하는 기능을 사용한 답변을 드리고 싶습니다.
그래서 라라벨 5.6 라라벨 기준으로 @Sarpadoruk이 언급한 것처럼 검증에서 기능을 추가했습니다.gt
,gte
,lt
그리고.lte
즉, 다음을 의미합니다.
gt
보다 큰.gte
와 동등 이상의.lt
보다 적은lte
와 동등하지 않은.
그래서 사용하기gt
확인할 수 있습니다.end_page
당신의 것보다 더 커야 합니다.initial_page
이제 작업이 매우 쉬워집니다.
$rules = [
'initial_page' => 'required_with:end_page|integer|min:1|digits_between: 1,5',
'end_page' => 'required_with:initial_page|integer|gt:initial_page|digits_between:1,5'
];
Laravel과 같은 필드 값을 비교할 수 있는 기본 제공 검증 기능이 없으므로, 사용자 정의 검증 기능을 구현하여 필요한 곳에 검증을 다시 사용할 수 있도록 해야 합니다.다행히도, Laravel은 사용자 정의 검증자를 작성하는 것을 매우 쉽게 만듭니다.
AppServiceProvider에서 새 검증자를 정의하는 것부터 시작합니다.
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Validator::extend('greater_than_field', function($attribute, $value, $parameters, $validator) {
$min_field = $parameters[0];
$data = $validator->getData();
$min_value = $data[$min_field];
return $value > $min_value;
});
Validator::replacer('greater_than_field', function($message, $attribute, $rule, $parameters) {
return str_replace(':field', $parameters[0], $message);
});
}
}
이제 $규칙에 새로운 유효성 검사 규칙을 사용할 수 있습니다.
$rules = [
'initial_page' => 'required_with:end_page|integer|min:1|digits_between: 1,5',
'end_page' => 'required_with:initial_page|integer|greater_than_field:initial_page|digits_between:1,5'
];
사용자 지정 검증자를 만드는 방법에 대한 자세한 내용은 http://laravel.com/docs/5.1/validation#custom-validation-rules 에서 확인할 수 있습니다.정의하기 쉽고 데이터를 검증하는 모든 곳에서 사용할 수 있습니다.
Laravel 5.4의 경우 다음과 같습니다.
$rules = ['end_page'=>'min:'.(int)$request->initial_page]
라라벨 5.6 기준,gte
,lt
그리고.lte
규칙이 추가되었습니다.
이런 걸 해보셔도 될 것 같아요.
$init_page = Input::get('initial_page');
$rules = [
'initial_page' => 'required_with:end_page|integer|min:1|digits_between: 1,5',
'end_page' => 'required_with:initial_page|integer|min:'. ($init_page+1) .'|digits_between:1,5'
];
gt = greater than :value|필드 사용
gte = equal보다 큼 :value|필드 사용
use lt = less :value|필드
lte = 같음 미만 사용:value|필드
당신의 경우에는.
gt:initial_page
그리고 그 결과는
$rules = array(
'initial_page' => 'required_with:end_page|numeric|min:1|digits_between: 1,5',
'end_page' => 'required_with:initial_page|numeric|gt:initial_page|min:2|digits_between:1,5'
);
정의하는 것이 어떨까요?$min_number = $min + 1
번호를 매기고 검증자 지정min:$min_number
예:
$min = intval($data['min_number']) + 1;
return ['max_number' => 'required|numeric|min:'.$min];
그런 다음 사용자 지정 오류 메시지를 반환하여 오류를 사용자에게 설명할 수 있습니다.
만약 당신이 Laravel 5.2에서 프로젝트를 유지하고 있다면, 다음은 당신을 위해 현재 gt 규칙을 지원해야 합니다.
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Validator::extend('gt', function($attribute, $value, $parameters, $validator) {
$min_field = $parameters[0];
$data = $validator->getData();
$min_value = $data[$min_field];
return $value > $min_value;
});
Validator::replacer('gt', function($message, $attribute, $rule, $parameters) {
return sprintf('%s must be greater than %s', $attribute, $parameters[0]);
});
}
}
그런 다음 현재 설명서에 따라 사용할 수 있습니다.
$rules = [
'end_page' => 'gt:initial_page'
];
Laravel 9.x에서 사용할 수 있습니다.gt:field
예:
$rules = [
'initial_page' => 'required_with:end_page|integer|min:1|digits_between: 1,5',
'end_page' => 'required_with:initial_page|gt:initial_page'
];
https://laravel.com/docs/9.x/validation#rule-gt
언급URL : https://stackoverflow.com/questions/32036882/laravel-validate-an-integer-field-that-needs-to-be-greater-than-another
'programing' 카테고리의 다른 글
C#에서 쿼리 문자열을 업데이트하는 방법은 무엇입니까? (0) | 2023.08.20 |
---|---|
iframe이 jQuery에서 로드를 완료했을 때 이벤트를 실행하려면 어떻게 해야 합니까? (0) | 2023.08.20 |
GZIP과 DEFLATE 압축의 장점은 무엇입니까? (0) | 2023.08.20 |
jQuery를 사용한 파이 차트 (0) | 2023.08.20 |
AJAX 요청 및 PHP 클래스 함수 (0) | 2023.08.20 |