1

いくつかのサブフォームがあるフォームがあります。isValid特定のサブフォームが1つだけ有効かどうかを確認するフォームのメソッドがあります。たとえば、subform2正しく検証されるかどうかを確認する必要があります。サブフォームが検証される場合、他のサブフォームの値が間違っていても、フォーム全体が正常に検証されるはずです。それらは検証されるべきではありません。私はこのようなことを試みました:

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

しかし、成功はありません。このコードは常にtrueを返します。フォーム全体がisValidオーバーライドなしで正常に検証されると、サブフォームは適切に検証されますが、すべて検証されます。

4

1 に答える 1

0

isSubFormValid少なくとも1つのサブフォームが有効な場合、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;
}

/* ... */
于 2012-12-10T00:36:46.007 に答える