“添加”屏幕的验证无效,但在编辑屏幕中使用相同的代码进行验证

时间:2015-05-15 13:15:21

标签: php validation zend-framework zend-form

我正在学习Zend框架,目前我已经为国家名称和大陆名称创建了添加,更新,删除功能,并且它运行良好。 我已经通过

设置了验证
$name->setRequired('true');

$continent->setRequired('true'); 

在我的form.php。

验证工作在编辑表单中,但它在添加表单中返回错误“发生错误”和“应用程序错误”。 以下是我的控制器代码:

添加:

/*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);
            }
        }
}

for Edit:

/*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());
        }
    }    

}

两个代码都相同,那么为什么验证不能以添加形式工作?

1 个答案:

答案 0 :(得分:1)

您需要在addAction逻辑中更改以下代码:

而不是:

$this->populate($formData);

使用

$form->populate($formData);

原因是$this表示在此上下文中的Action对象,并且您在EditAction中正确使用了$form对象,因此它正常工作,因此它是一种愚蠢的输入错误。

PS:您还应该在isPostisValidate等方法名称中使用正确的大小写,否则可能会在Linux环境中出错。