2

パスワード用のフィールドを作成する次のコードがあります。

// 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');

私のコントローラーでは、いくつかの条件に応じて、バリデーターを削除し、コントローラーから「必須」を false にする必要があります。

例えば:-

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

この場合の解決策を知っている人はいますか?

4

3 に答える 3

7

次のようにコントローラーでフォームをインスタンス化した場合:-

$loginForm = new Application_Form_LoginForm();

次に、次のようにPassword(またはその他の)要素の属性を設定できます。-

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());
}
于 2012-10-12T07:27:40.760 に答える
4

必須ではなく、検証されていないパスワードフォーム要素を表示する意味はありますか? コントローラーから要素全体を削除することもできます。

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

また、要素'Required'を設定して'NotEmpty'バリデーターを使用することは、 'NotEmpty'Zend_Form_Elementバリデーターを使用して'Required' を検証するため、少し冗長であることに注意してください。したがって、 'NotEmpty'を使用する場合、 'Required' を true に設定する必要はありません。isValid()

于 2012-10-12T09:23:13.673 に答える