programing

Laravel: 다른 필드보다 커야 하는 정수 필드의 유효성을 검사합니다.

instargram 2023. 8. 20. 10:14
반응형

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

반응형