Forms ZEND:在验证失败时显示表单错误消息
我有一张表格,上面写着:Forms ZEND:在验证失败时显示表单错误消息,forms,validation,zend-framework,Forms,Validation,Zend Framework,我有一张表格,上面写着: 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->setRequ
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'
以显示相同的表单,但有错误,以便用户重新输入正确的值。
问题是我不知道如何让编辑操作知道表单必须显示验证错误
在$this->_helper->redirector'edit','user details';形式被重新显示
作为一个新的形式与清除错误,但我需要他们显示
我这样做对吗
问候
Tom问题源于这样一个事实,即您正在重定向,并且在每个方法中您都在创建表单的新实例,这意味着表单类正在丢失其状态—您从请求中注入的数据以及传递给此对象的任何其他值 将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方法中将form对象实例化为将其设置为控制器的属性。这将使您在重定向后重用同一实例。我仍然认为上面的解决方案更简洁,也更容易被其他人理解。除了结合这两种方法之外,没有其他优雅的方法了吗?我是ZEND的新手,希望使用最佳实践。这就是显示验证错误的方法吗?我想到了,但不确定。我更新了答案:我认为这是一个更紧凑的解决方案,更少的代码集中在一个地方。