添加屏幕的验证不起作用,但它在使用相同代码的编辑屏幕中工作
Validation for Add screen not working but it working in edit screen with same code
我正在学习 Zend 框架,目前我已经为国家名称和大陆名称创建了添加、更新、删除功能,并且运行良好。
我已将验证设置为
$name->setRequired('true');
和
$continent->setRequired('true');
在我的 form.php.
验证在编辑表单中工作,但在添加表单中 return 错误 'An error occurred' 和 'Application error'。
下面是我的控制器代码:
添加:
/*Add Record into Database*/
public function addAction()
{
$form =new Application_Form_Add();
$form->submit->setlabel('Add Country');
$this->view->form = $form;
if($this->getRequest()->ispost())
{
$formData = $this->getRequest()->getpost();
if($form->isvalid($formData))
{
$file = new Application_Model_Country();
$name = $form->getvalue('name');
$continent = $form->getvalue('continent');
$file->addCountry($name, $continent);
$this->_helper->redirector('index');
}
else
{
$this->populate($formData);
}
}
}
编辑:
/*Edit Record into Database*/
public function editAction()
{
$form = new Application_Form_Edit();
$form->submit->setlabel('Edit Country');
$this->view->form = $form;
if($this->getRequest()->ispost())
{
$formData = $this->getRequest()->getpost();
if($form->isvalid($formData))
{
$id = $form->getvalue('country_id');
$name = $form->getvalue('name');
$continent = $form->getvalue('continent');
$file = new Application_Model_Country();
$file->updateCountry($id,$name,$continent);
$this->_helper->redirector('index');
}
else
{
$form->populate($formData);
}
}
else
{
$id = $this->getRequest()->getparam('country_id');
if($id >0)
{
$formData = $this->getRequest()->getpost();
$file = new Application_Model_Country();
$files = $file->fetchRow('country_id='.$id);
$form->populate($files->toArray());
}
}
}
两个代码相同,那么为什么验证在添加表单中不起作用?
您需要更改 addAction
逻辑中的以下代码:
而不是:
$this->populate($formData);
使用
$form->populate($formData);
原因是 $this
在此上下文中表示 Action 对象,并且您在 EditAction 中正确使用了 $form
对象,因此它可以正常工作,所以这是一个愚蠢的输入错误。
PS: 你还应该在方法名称中使用正确的大小写,如 isPost
、isValidate
等。否则在 Linux 环境中可能会出错。
我正在学习 Zend 框架,目前我已经为国家名称和大陆名称创建了添加、更新、删除功能,并且运行良好。 我已将验证设置为
$name->setRequired('true');
和
$continent->setRequired('true');
在我的 form.php.
验证在编辑表单中工作,但在添加表单中 return 错误 'An error occurred' 和 'Application error'。 下面是我的控制器代码:
添加:
/*Add Record into Database*/
public function addAction()
{
$form =new Application_Form_Add();
$form->submit->setlabel('Add Country');
$this->view->form = $form;
if($this->getRequest()->ispost())
{
$formData = $this->getRequest()->getpost();
if($form->isvalid($formData))
{
$file = new Application_Model_Country();
$name = $form->getvalue('name');
$continent = $form->getvalue('continent');
$file->addCountry($name, $continent);
$this->_helper->redirector('index');
}
else
{
$this->populate($formData);
}
}
}
编辑:
/*Edit Record into Database*/
public function editAction()
{
$form = new Application_Form_Edit();
$form->submit->setlabel('Edit Country');
$this->view->form = $form;
if($this->getRequest()->ispost())
{
$formData = $this->getRequest()->getpost();
if($form->isvalid($formData))
{
$id = $form->getvalue('country_id');
$name = $form->getvalue('name');
$continent = $form->getvalue('continent');
$file = new Application_Model_Country();
$file->updateCountry($id,$name,$continent);
$this->_helper->redirector('index');
}
else
{
$form->populate($formData);
}
}
else
{
$id = $this->getRequest()->getparam('country_id');
if($id >0)
{
$formData = $this->getRequest()->getpost();
$file = new Application_Model_Country();
$files = $file->fetchRow('country_id='.$id);
$form->populate($files->toArray());
}
}
}
两个代码相同,那么为什么验证在添加表单中不起作用?
您需要更改 addAction
逻辑中的以下代码:
而不是:
$this->populate($formData);
使用
$form->populate($formData);
原因是 $this
在此上下文中表示 Action 对象,并且您在 EditAction 中正确使用了 $form
对象,因此它可以正常工作,所以这是一个愚蠢的输入错误。
PS: 你还应该在方法名称中使用正确的大小写,如 isPost
、isValidate
等。否则在 Linux 环境中可能会出错。