2013-10-24 1 views
0

사용자가 자신의 옵션 목록을 입력 할 수있는 사용자 구성 가능한 드롭 다운 목록이 있습니다. in:foo,bar 종류의 유효성 검사 규칙으로 유효성을 검사하고 싶습니다.Laravel 유효성 검사 규칙을 이스케이프 처리

일부 사용자는 "예, 할 수 있습니다"와 같은 옵션을 사용하게됩니다. 유효성 검사 규칙에 드롭 다운 옵션의 내파 된 목록을 전달하면 유효성 검사가 중단됩니다.

이 문제를 피하기 위해 Laravel의 규칙을 벗어날 수 있습니까?

+0

이 올바른, 당신은 쉼표를 기반으로 내파하고 가정? 그들에게 줄 바꿈 문자를 줄 수 있습니까? (한 줄에 한 항목 씩) – fideloper

+0

@fideloper Laravel의'in' 규칙에 쉼표로 구분 된 값 목록이 필요하므로 쉼표로 섞을 것입니다. Textarea는 사용자가 쉼표를 입력 할 수 있기 때문에 도움이되지 않습니다. – ceejayoz

+0

유효성 검사 규칙을 적용하기 전에 쉼표를 제거하지 않는 이유는 무엇입니까? – itachi

답변

8

Validator 클래스는 PHP의 str_getcsv()을 사용하여 규칙의 속성을 구문 분석합니다. Validator::parseParameters() (

  • 규칙 이름과 (Validator::parseRule())
  • str_getcsv()을 통해 속성을 보내기 : 콜론 구분 기호를 사용하여 매개 변수를 폭발 | 파이프 구분 기호 (Validator::explodeRules())
  • 을 사용하는 모든 규칙을 폭발 :이 과정은 같은 간다)

이렇게하면 In: 옵션 목록을 CSV 파일과 동일한 방식으로 정의 할 수 있습니다. 각 열을 따옴표로 묶으십시오! 예를 들면 다음과 같습니다.

$input = ['foo' => 'Hello, world!']; 

// Note the formatting of the `in:` options 
$rules = ['foo' => 'required|in:"StackOverflow","Laravel","Hello, world!"',]; 

$v = Validator::make($input, $rules); 

var_dump($v->passes()); // true 

또한 Laravel과 마찬가지로 대부분의 경우 Laravel과 마찬가지로 애플리케이션에 적합한 방식으로 Validator 클래스를 확장 할 수 있습니다. 좀 더 강력한 기능을 원한다면 "재고품"즉석 옵션만을 고집하지 않아도됩니다. :)

+0

우후! 고마워. – ceejayoz

1

Cryode가 대답 한대로 Laravel은 허용 된 값을 CSV로 디코딩합니다. 다음은 수동으로 이스케이프 처리하는 것에 대한 걱정없이 문자열 배열에서이 CSV 인코딩 문자열을 생성하는 데 사용할 수있는 도우미 메서드입니다.

이처럼 사용

$validator = new Validator(Input::all(), [ 
    'flavour' => [ 
     'required', 
     ValidatorHelper::inRule([ 
      "mint choc chip", 
      "rum and raisin", 
      "orange, peach and pineapple", 
     ]), 
    ], 
]); 
관련 문제