2011-08-30 1 views
3

에 대한 빈 필드를 허용하는 방법 :이에게 "allowEmpty"를 추가하고 싶지만 올바른 구문을 찾을 수젠드 프레임 워크 - 내 요소에 대해이 구성을 사용하고 폼 요소

$freetext = $this->CreateElement('textarea', 'freetext') 
      ->setLabel('Comments') 
      ->setAttrib('class','input-textarea') 
      ->setOptions(array('rows' => '2', 'cols'=>'30')) 
      ->addValidator('StringLength', false, array(0,500)) 
      ->addFilter('HtmlEntities') 
      ->addFilter('StripTags') 
      ->setRequired(true); 

. 나는 다음과 같은 것을 기대하고 있었다 :

... ->addValidator('allowEmpty', false, true) 

그러나 이것은 효과가 없다.

편집 : 필자는 setRequired()를 true로 변경했습니다. 빈 문자열을 필수 입력란에 허용되는 값으로 허용하고 싶습니다.

사용 방법에 관계없이이 옵션을 요소에 어떻게 추가합니까?

+1

당신은 단지'에 검사기를 변경할 수 -> addValidator ('StringLength', 거짓, 배열 (0,500)) '? – ChrisA

+0

예.하지만이 옵션을 어떻게 추가합니까? – Owen

+0

혼란스러워. 왜 setRequired (true)를 사용해야합니까? false로 설정하고 유효성 검사기를 추가하면 올바르게 수행됩니다. 비어 있거나 유효성이 올바르게 검증 된 경우 작동합니다. 검증에 실패하면 setRequired가 false 임에도 불구하고 form이 제출되지 않습니다. – riku

답변

3
$freetext = $this->CreateElement('textarea', 'freetext') 
      ->addValidator('StringLength', false, array(10,500)) 
      ->setRequired(false); 

에 코드를 이미 setRequired(false) 방법은 당신이 요구하고있는 값이 다음 제출하지 않은 경우 즉, 유효성 검사기가 실행되지 않습니다 무엇을, 그렇게해야한다.

작성한 코드, 일부 유효성 검사 오류 메시지 또는 다른 문제가 있습니까? 내가 true로 setRequired()를 변경했습니다

업데이트 - 내가 필요로 필드에 허용되는 값으로 빈 문자열을 허용 할.

setRequired(true)의 의미는 무엇이며 유효 값으로 빈 문자열을 허용합니까? 또는 요소가 비어있을 수 있다면 무엇을 더 필요로합니까?

엘리먼트가 필요하면 빈 문자열과 다른 값을 가져야하기 때문에 편집에서 묻는 것은 의미가 없습니다. 빈 문자열을 유효한 값으로 사용하려면 setRequired(false)을 사용하십시오. Zend_Form::getValues() 또는 Zend_Form_Element::getValue()으로 양식 값을 가져 오면 빈 문자열을 결과로 가져옵니다.

어쨌든 여기가 setRequired의 설명과 setAllowEmptyfrom ZF manual입니다 :

, 기본값을 사용하여 그것을 위해 빈 문자열을 전달 값을 전달하거나 없이 요소를 검증, 모든 검증을 건너 뛰고 TRUE 에 확인합니다 . 의 손길이 닿지 않은 다른 두 언급 한 플래그를 떠나

  • setAllowEmpty (false)를에 관계없이 isValid에 전달 된 값(), 당신은 이 요소에 대해 정의 된 검증 체인에 대한 유효성을 검사합니다.

  • setRequired (참)의 손길이 닿지 않은 다른 두 언급 한 플래그를두고는, 은 $ breakChainOnFailure 플래그가 설정되어, 발리 체인 (없음 가 이미 설정되어 있지 않은 경우))의 상단에 '는 NotEmpty'검사기를 추가합니다.이 동작은 필수적인 플래그 의미 의미를 부여합니다. 값이 전달되지 않으면 즉시 제출을 무효화하고 사용자에게 알리고 은 유효하지 않은 데이터 인 이 이미 알고있는 것으로 실행되는 것을 차단합니다. 이 동작을 원하지 않는 경우

, 당신은 setAutoInsertNotEmptyValidator ($ 플래그)에 FALSE 값을 전달하여 해제 할 수 있습니다; 이것은 발리 데이터 체인에 'NotEmpty'유효성 검사기를 배치하지 않도록 isValid()가 방지합니다.

+0

내 질문을 편집했습니다. 나는 다른 옵션에서 더 나은 사용법을 발견 할 수 있기 때문에이 옵션을 요소에 추가 할 수 있는지 궁금합니다. – Owen

+0

@Owen 편집 내용을 반영하도록 답변을 업데이트했습니다. – Fabio

+0

@Fabio @Owen과 같은 상황이있었습니다. 세 가지 양식 필드 중 하나가 데이터로 채워져 있는지 확인해야했습니다. 나는 이것을 검사하는 커스텀 validator를 작성했지만 validator가 작동하도록'required => true'를 추가해야하기 때문에 해고 당하지 않았다. 그러나 검사기가 해고되기 전에 필드가 비어 있지 않아야합니다. 'setAllowEmpty()'가 도움이 될 때 상황이 발생합니다. – piotrekkr

5

-> setRequired (false);

빈 문자열을 허용하고 빈 문자열을 데이터베이스에 저장하려는 경우 충분합니다. 당신이 필드는 선택 사양 아무것도 지정하지 않으면 데이터베이스에 null 값을 유지하려면

, 추가

->addFilter(new Zend_Filter_Null) 
+1

필터를 가져 주셔서 감사합니다. 3 년 동안의 의견 수렴 후 내 날을 저장했습니다. – smozgur

+0

당신은 내 하루를 보냈습니다. 이걸 너무 오랫동안 찾고 있었어요 ... – frgtv10

+1

모두에게이 점에 관해서 : 젠드 프레임 워크 3에서는 클래스를 ToNull이라고하며 필터로 설정할 수 있습니다 – rogaa