2012-10-12 1 views
2

암호 용 필드를 만드는 다음 코드가 있습니다.유효성 검사기를 제거하고 컨트롤러에서 required를 false로 설정하십시오.

// Element: password 
$this->addElement('Password', 'password', array(
    'label' => 'Password', 
    'description' => 'Passwords must be at least 6 characters long.', 
    'required' => true, 
    'allowEmpty' => false, 
    validators' => array(
     array('NotEmpty', true), 
     array('StringLength', false, array(6, 32)), 
     ) 
)); 
$this->password->getDecorator('Description')->setOptions(array('placement' => 'APPEND')); 
$this->password->getValidator('NotEmpty')->setMessage('Please enter a valid password.', 'isEmpty'); 

내 컨트롤러에서 일부 조건에 따라 유효성 검사기를 제거하고 컨트롤러에서 '필수'를 거짓으로 만들어야합니다. 예를 들어

: -

if($someCondition){ 
    //Set required to false and remove validator here somehow 
} 

어느 한이 사건에 대한 해결책을 알고 있나요?

$loginForm = new Application_Form_LoginForm(); 

그런 다음 다음과 같이 암호에 대한 속성 (또는 다른)의 요소를 설정할 수 있습니다 : - -이 :이 같은 컨트롤러에서 양식을 인스턴스화 한 경우

답변

7

if($someCondition){ 
    $loginForm->Password->setRequired(false); 
    $loginForm->Password->setValidators(array()); 
} 

또는, Zend_Form_Element::setRequired() 반환 Zend_Form_Element의 인스턴스로, 당신은이 작업을 수행 할 수 있습니다 : -

if($someCondition){ 
    $loginForm->Password->setRequired(false)->setValidators(array()); 
} 
+0

작동하지만 사회형 엔진 4의 플러그인 프로 시저를 사용하므로 양식이 $ loginForm = new Application_Form_LoginForm()과 같이 렌더링되지 않습니다. 귀중한 시간을 가져 주셔서 감사합니다. –

4

필수가 아니고 유효성이 확인되지 않은 암호 양식 요소를 표시하는 데있어 어떤 점이 있습니까? 컨트롤러에서 전체 요소를 제거 할 수도 있습니다.

또한
//in your controller 
$form->removeElement('Password'); 

하는 요소 '필수'을 설정하고 '는 NotEmpty' 유효성 검사기를 사용하여 Zend_Form_ElementisValid()에 '필수'의 유효성을 검사 '는 NotEmpty' 검사기를 사용하기 때문에 조금 중복 알고 있어야 . 따라서 'NotEmpty'을 사용하는 경우 'Required'를 true로 설정할 필요가 없습니다.

+1

좋은 지적. +1 – vascowhite