2010-03-24 2 views
3

양식을 제출할 때 비활성화 된 양식 필드가 요청에 제출되지 않습니다.젠드 프레임 워크 : isValid()는 비활성화 된 양식 필드에서 값을 지 웁니다!

양식에 사용할 수없는 양식 필드가있는 경우 Zend_Form::isValid()으로 작업하면 다소 실망 스럽습니다.

$form->populate($originalData); 
$form->my_text_field->disabled = 'disabled'; 
if (!$form->isValid($_POST)) { 
    //form is not valid 
    //since my_text_field is disabled, it doesn't get submitted in the request 
    //isValid() will clear the disabled field value, so now we have to re-populate the field 
    $form->my_text_field->value($originalData['my_text_field']); 
    $this->view->form = $form; 
    return; 
} 

// if the form is valid, and we call $form->getValues() to save the data, our disabled field value has been cleared! 

양식을 다시 채우지 않고 중복 된 코드 줄을 만들지 않고도이 문제에 접근하는 가장 좋은 방법은 무엇입니까?

+0

실제로 젠드 양식은 아닙니다. HTML 스펙에 따르면 disabled 요소는 제출되지 않지만 readonly 요소는 수행합니다 (아래 @robertbasic의 제안을 설명 함). –

답변

5

사용 안 함으로 요소를 설정하고 있는가? 그렇다면 요소의 readonly 속성을 true로 설정하면됩니다.

+0

나는 똑같은 문제가 있었는데 이것이 효과가 있었다. robertbasic이 말했듯이 'disabled'속성 대신 'readonly'속성을 설정하십시오. –

+0

Readonly가 제출되고 사용 중지되지 않습니다. 자세한 내용은 "disabled", "readonly"및 [ "successful"]의 비트와 같은 [WC3의 HTML 양식] (http://www.w3.org/TR/html401/interact/forms.html)을 참조하십시오. http://www.w3.org/TR/html401/interact/forms.html#successful-controls) - 읽기 전용은 성공할 수 있지만 비활성화는 수행 할 수 없으므로 제출되지 않습니다. –

1

저는 Zend_Form에서 상속 된 커스텀 클래스를 사용합니다. 클래스에서 일부 기능을 추가하고 다음과 같은 방법 isValid를 교체함으로써이 문제를 해결 : 사용자가이 내용을입니다 만 그것을보고 편집 할 수 있도록

class Murdej_Form extends Zend_Form { 
    function isValid($data) { 
     $_data = $this->getValues(); 
     $valid = parent::isValid($data); 
     $this->populate($_data); 
     return $valid; 
    }; 
}; 
0

대신 isValid()을 사용하면 isValidPartial()을 사용할 수 있습니다. 그러나 isValid()과 달리 특정 키가 없으면 해당 특정 요소에 대한 유효성 검사가 실행되지 않습니다. 따라서 isValidPartial()은 사용 중지 된 입력란의 유효성을 검사하지 않습니다.

참조 : ZF Documentation

+1

필수 필드가 양식에 제출되지 않은 경우 유효성이 검사되지 않는 경우에만 문제가 발생합니다. – Andrew