添加屏幕的验证不起作用,但它在使用相同代码的编辑屏幕中工作

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: 你还应该在方法名称中使用正确的大小写,如 isPostisValidate 等。否则在 Linux 环境中可能会出错。