2015-02-16 3 views
0

У меня есть форма сказать:ZEND: Отображение формы сообщений об ошибках на неудачной проверки

class Application_Form_UserDetails extends Zend_Form 
{ 

public function init() 
{ 

    $pswd = new Zend_Form_Element_Password('password'); 
    $pswd->setLabel('New password:'); 
    $pswd->setAttrib('size', 25); 
    $pswd->setRequired(false); 
    $pswd->addValidator('StringLength', false, array(4,15)); 
    $pswd->addErrorMessage('Wron password'); 
} 
} 

В моих сведений о пользователе класс контроллера у меня есть:

class UserDetailsController extends Zend_Controller_Action { 



public function editAction() 
{ 

    $userId = $this->userInfo->id; 

    $DbTableUsers = new Application_Model_DbTable_User; 

    $obj = $DbTableUsers->getUserDetails($userId); 

    $this->view->formUser = new $this->_UserDetails_form_class; 
    $this->view->formCompany = new $this->_CompanyDetails_form_class; 

    if ($obj) { 

     $this->view->formUser->populate($obj); 
    } 

    $url = $this->view->url(array('action' => 'update-user-details')); 
    $this->view->formUser->setAction($url); 

    } 







public function updateUserDetailsAction() 
{ 


    $formUser = new $this->_UserDetails_form_class; 


    if ($formUser->isValid($this->getRequest()->getPost())) { 



    } 
    else { 
     //validation failed 

     $formUser->markAsError(); 

     $this->view->formUser = $formUser; 
     $this->_helper->redirector('edit', 'user-details'); 


    } 


} 



    } 

Первый раз Редактировать действие называется формой встроенный и отображаемый. Пользователь заполняет форму и отправляет ее (вызывается updateUserDetailsAction). В updateUserDetailsAction, при ошибке проверки. Я отмечаю форму как имеющую ошибки и хочу отобразить форму с сообщениями об ошибках, которые я ранее задал в классе updateUserDetailsAction.

Затем я перенаправляю: $ this -> _ helper-> redirector ('edit', 'user-details');

, чтобы отобразить ту же форму, но с ошибками для повторного ввода правильных значений. Проблема в том, что я не знаю, как сообщить о действии редактирования, что форма должна отображать ошибки проверки?

On $ this -> _ helper-> redirector ('edit', 'user-details'); форма перерисовывается как новая форма с очищенными erros, но мне нужно, чтобы они отображались.

Я делаю это правильно?

С уважением Томом

ответ

0

Проблема возникает из-за того, что вы перенаправляете и в каждом методе вы создаете новый экземпляр формы, это означает, что класс формы теряет свое состояние - данные, которые вы вводили из запроса и любые другие значения, переданные этому объекту.

комбинат editAction и updateUserDetailsAction в один метод:

... 
$formUser = new Form(); 
// populate the form from the model 
if ($this->getRequest()->isPost()) { 
    if ($formUser->isValid($this->getRequest()->getPost())) { 
     // update the model 
    } 
} 
... 

и имеют вид представляется в действие редактирования. Это упростит ваш код и удалит дублирование кода.

Если вы просто хотите исправить свой код, вы можете создать экземпляр объекта формы в методе init() вашего контроллера, как указано в качестве свойства вашего контроллера. Это приведет к повторному использованию одного экземпляра после перенаправления. Я все еще думаю, что решение выше намного более компактно и легче понять для кого-то другого.

+0

Нет ли другого «элегантного» способа, чем комбинирование этих двух методов? Я новичок в ZEND и хочу использовать лучшие практики. Так ли это должно быть сделано с отображением ошибок проверки? Я подумал об этом, но не был уверен. – Tom

+0

Я обновил ответ: я думаю, что это гораздо более компактное решение, меньше кода, который находится в одном месте. –

+0

Большое спасибо! Работает как шарм. – Tom

Смежные вопросы