zend 框架子表单isValidPartial?

Posted

技术标签:

【中文标题】zend 框架子表单isValidPartial?【英文标题】:zend framework subform isValidPartial? 【发布时间】:2012-12-08 18:30:36 【问题描述】:

我有一个表格,上面有几个子表格。我有一个isValid 用于检查是否只有一个特定子表单有效的表单方法。例如,我必须检查subform2 是否正确验证。如果子表单验证,则整个表单都应该成功验证,即使其他子表单的值错误。他们只是不应该被验证。我试过这样的事情:

if($subform->isValidPartial($_POST))
    return true;
else
    return false;

但没有成功。此代码始终返回 true。当整个表单在没有 isValid 覆盖的情况下正常验证时,子表单会正确验证,但您都会被验证。

【问题讨论】:

【参考方案1】:

isSubFormValid 如果至少有一个子表单有效,则返回 true。您可以指定子表单名称或传递null

class My_Form extends Zend_Form

    public function isSubFormValid($name = null, array $data = null)
    
        if (is_null($name)) 
            $subForms = $this->getSubForms();
         else 
            $subForms = array($this->getSubForm($name));
        

        foreach ($subForms as $subForm) 
            if ($subForm->isValid($data)) 
                return true;
            
            

        return false;
        

使用示例:

class Example extends My_Form

    public function init()
    
        $subForm1 = new Zend_Form_SubForm();
        $subForm1->addElement($this
            ->createElement('text', 'name')
            ->setRequired(true));

        $subForm2 = new Zend_Form_SubForm();
        $subForm2->addElement($this
            ->createElement('text', 'name')
            ->setRequired(true));

        $this->addSubForm($subForm1, 'form1');
        $this->addSubForm($subForm2, 'form2');

        $this->addElement($this->createElement('submit', 'send'));
        


/* ... */
public function indexAction()

     $form = new Example();

     if ($this->_request->isPost()) 
         if ($form->isSubFormValid(null, $this->_request->getPost())) 
             die('is valid');
         
     

     $this->view->form = $form;


/* ... */

【讨论】:

非常感谢。它会在树状子窗体结构中工作吗?比如主窗体(array(subform1(array(subform3, subform4)), subform2(array(subform5, subform6))))?

以上是关于zend 框架子表单isValidPartial?的主要内容,如果未能解决你的问题,请参考以下文章

在 zend 框架中填充子表单的问题

Zend 框架 - 定制表单验证

Zend 表单/子表单部分渲染

Zend Framework 调用表单作为表单中的子表单

你能在 Zend 子表单中添加错误装饰器吗?

Zend 框架表单与 jquery