2012-01-23 1 views
2

updatePasswordAction을 구현하고 있으며 현재 잘못된 암호로 오류를 표시하지 않습니다. Zend_Validate 클래스를 사용하여 제공된 레코드 -> 암호와 함께 구현할 수 없으므로 이제 컨트롤러 동작에서 유효성을 검사했습니다. 실패하면 폼 요소에 오류 메시지를 추가합니다. 이것은 $form->isValid을 실행하기 직전입니다. 어쨌든, 그 일. 유효성 검사가 실패하면 요소에 대한 오류 메시지가 표시되지 않습니다. 어떤 도움이라도 대단히 감사하겠습니다.Zend_Form이 addError 호출과 함께 오류 메시지를 표시하지 않습니다.

는 참고 : 나는 빈 현재 암호를 제출하면, 그 다음 무효로 양식 자체가 발생하지 않습니다 요소에 오류가 추가 검증

class Admin_Form_UserPassword extends Katana_Form 
{ 
    public function init() 
    { 
    $element = $this->createElement('hidden', 'id'); 
    $this->addElement($element); 

    $element = $this->createElement('password','password'); 
    $element->setLabel('Current Password:'); 
    $element->setRequired(true);   
    $this->addElement($element); 

    $element = $this->createElement('password','new_password');  
    $element->setLabel('New Password:'); 
    $element->addValidator('StringLength', false, array(6,24));  
    $element->setRequired(true); 
    $element->addValidator('NotEmpty');  
    $this->addElement($element); 

    $element = $this->createElement('password','new_password_confirm'); 
    $element->setLabel('Confirm:'); 
    $element->addValidator('StringLength', false, array(6,24)); 
    $element->addValidator('IdenticalField', false, array('new_password', 'Confirm Password')); 
    $element->setRequired(true); 
    $this->addElement($element); 

    $this->addElement('submit', 'submit', array('label' => 'Submit')); 
} 

}

public function updatePasswordAction() 
{ 
    $resourceModel = new Core_Model_Resource_User();  
    $form   = new Admin_Form_UserPassword(); 
    $form->setMethod(Katana_Form::METHOD_POST); 
    $form->setAction($this->getActionUrl('update-password')); 
    if($this->getRequest()->isPost()){ 
     $id    = $this->getRequest()->getParam('id'); 
     $record   = $resourceModel->find($id)->current(); 
     $currPassword = $record->password; 
     $typedPassword = md5($this->getRequest()->getParam('password'));   
     if($currPassword !== $typedPassword){    
      $form->getElement('password')->addError('Current password is incorrect.'); 
     } 
     if($form->isValid($_POST)){ 
      $data  = $form->getValues(); 
      $result  = $resourceModel->updatePassword($id, $data['new_password']); 
      if($result){ 
       $this->redirectSimple('list'); 
      } 
     } 
    } else { 
     $id  = $this->getRequest()->getParam('id');   
     $recordData = array(
      'id' => $id 
     ); 
     $form->populate($recordData);   
    } 
    $this->getView()->form = $form;  
} 
+0

'작동하지 않음'이란 무엇을 의미합니까? 약간의 오류가 있습니까? 아무 반응이 없습니다? – BartekR

+0

유효하지 않은 currentpassword를 제출하면 해당 오류 메시지가 표시되지 않습니다. ($ form-> isValid ($ _ POST)) { – jkushner

+0

}을 실행하기 바로 전에 updatePasswordAction 내에서 $ form-> getElement ('password') -> addError ('현재 암호가 잘못되었습니다.') 'Zend_Form_Element :: addError()'는 추가 함수이므로 Zend_Form :: getErrorMessages()를 사용하여 검색해야합니다. 'getErrorMessagess()'를 사용합니까? – BartekR

답변

6

을 보여줍니다 .

이 해결하기 위해 내가 사용하는 2 개 이상의 방법이 있습니다이 : 폼 요소에 오류를 추가 할 때

if($currPassword !== $typedPassword){    
    $form->getElement('password')->addError('Current password is incorrect.'); 
    $form->markAsError(); 
} 

// or 

if ($form->isValid($_POST) && 0 == sizeof($form->getMessages()) { 
    // form was valid, and no errors were set on elements 
} 

가 명확히하려면, 해당 요소에 부착 된 오류,하지만 Zend_Form있다 :: isValid는 validator 만 실행하고 적절한 오류를 설정합니다. 특정 요소에 오류가 설정되었는지 확인하지 않습니다.

그러나 양식 또는 그 하위 요소에 첨부 된 모든 오류 메시지를 받으려면 $form->getMessages()을 호출 할 수 있습니다. 이 값이 0이고 양식의 유효성을 검사했다면 오류가 없음을 의미합니다. 양식에 isValid이 전달되었지만 요소에 오류가 추가 된 경우 추가 한 오류 메시지가 포함됩니다.

+1

$ form-> markAsError(); 그냥 나를 구해 줘서 고마워. +1 – wesside

0

나는 이렇게 만들었다.

컨트롤러 :

if ($trial->getKind() != 'debt' && $_POST['kind'] == 'debt') 
{ 
    $editForm->getElement('kind')->markAsError(); 
} 

if ($editForm->isValid($_POST)) { ... } 

형태 :

public function isValid($data) 
{ 
    $valid = parent::isValid($data); 

    if ($this->getElement('kind')->hasErrors()) { 
     $this->getElement('kind')->addError($this->_translate->translate('You can\'t change trial kind to debt.')); 
     $valid = false; 
    } 

    return $valid; 
} 

그리고 this comment

저를 도왔다.