2013-08-27 3 views
0

프로젝트에서 Zend Framework 1.12를 사용하고 있습니다. Zend_Form에 문제가 있습니다. 일부 필드는 실행 시간에 동적으로 생성되지만 Zend_Form은 정적 요소이며 생성시 미리 정의 된 요소입니다.Zend 양식 요소를 동적으로 작성하십시오.

양식을 전송할 때 새 필드가 추가되어 전송 된 양식이 작성된 양식과 일치하지 않으므로 유효성 검사가 작동하지 않습니다.

어떻게 적응합니까?

+0

당신이 "일부 필드를 동적으로 실행 시간에 생성 된"무슨 뜻인지 설명 할 수 : 검증 작업에서

class MyForm extends Zend_Form { public function init() { //... Create here the basic elements } public function initFromPostValue($post) { if(array_key_exists('dynamicsField', $post)) { $el = $this->createElement('select', 'dynamicsField') ->setValidators(array(... PUT your validators here)); $this->addElement($el); } } } 

를? 내 견지에서 볼 때 이러한 폼 요소는 컨트롤러에서 만들어지고 유효성 검사가 시작되기 전에 양식에 추가됩니다. 그래서, 그것이 효과가 있습니다. 유효성 검사를하기 전에 요소를 만들고 추가하는지 확인할 수 있습니까? –

+0

폼 요소는 컨트롤러에서 인스턴스화 된 다음 뷰에 추가됩니다. 처음에는 양식에 Zend_Form_Element_Select가 있습니다. 데이터는 동일한 양식으로 사용자가 만듭니다. 따라서 사용자가 새 레지스트리를 작성할 때마다 Ajax 호출이 완료되고이 선택 입력에 새 레지스트리를 추가합니다. 처음에는 비어있는 Zend_Form_Element_Select는 작성 시점보다 많은 속성으로 전송됩니다. 양식이 일치하지 않으므로 유효성 검사 방법이 작동하지 않습니다. –

+0

글쎄, 당신은보기로 보내면 안됩니다. 양식에 추가해야합니다. 그런 다음 양식을보기로 보냅니다. 그것이 작동해야하는 방법입니다. –

답변

1

해결 방법 : 폼을 보낸 후 $_POST 배열을 가져온 다음 필드/값을 확인하고이 필드/유효성 검사를 사용하여 양식 객체를 만들거나 수정하십시오.

+0

나는 당신이 제안한 방법을 시도했지만, "요소 '가 건초 더미에서 발견되지 않았습니다."와 같은 다른 오류가있었습니다. 나는 요소의 검증을 비활성화하는 해결책을 발견했다. 아름다운 아니었지만, 잘 작동합니다. 감사합니다. –

0
내가 이런 식으로했을

:

public function validationAction() 
{ 
    $form = new MyForm(); 
    $form->initFromPostValue($_POST); 

    if($form->isValid($_POST)) { 
     // Form is valid 
    } else { 
     // Form is invalid 
    } 
} 
관련 문제