Search code examples
zend-frameworkzend-formzend-form-sub-form

how do you group subforms


i have 4 subforms in a form i would like to group 2 of them together, and then apply some decorators to them.

here is what i have so far. w/in each subform i already have some display groups present

$this->setSubForms(array(
    'sub1'  => $sub1,
    'sub2'  => $sub2,
    'sub3'  => $sub3,
    'sub4'  => $sub4
));

i thought i could do something like

$set1 = $this->setSubFormDecorators(array(
    'sub1'  => $sub1,
    'sub2'  => $sub2
    ));
    $set1->setDecorator(array('something here'));

$set2 = $this->setSubFormDecorators(array(
    'sub3'  => $sub3,
    'sub4'  => $sub4
    ));
    $set2->setDecorator(array('something here'));

obviously this doesn't work at all.

I really couldn't find anything in ZF's documentation. I thought i post it here if anyone else has run across this quandary.


Solution

  • so basically i've figured it out.

    first off you create "empty" subforms

    $left = new Zend_Form_SubForm();     
    

    then you add the subforms you want inside of this "subform"

    $left->setSubForms(array(
       'sub1'  => $sub1,
       'sub2'  => $sub2
    ));
    

    you do the same thing for the other subform you want to add decorators to.

    $right = new Zend_Form_SubForm();     
    
    $right->setSubForms(array(
       'sub3'  => $sub3,
       'sub4'  => $sub4
    ));
    

    then to your original form you add these new "$left" and "$right" subforms

    $this->setSubForms(array(
       'left'  => $left,
       'right' => $right
    ));
    

    you can then apply decorators to the "$left" and "$right" subforms as you see fit.

    since i want to drop the fieldsets that encapsulate the elements inside mine looks like this, you do the same to the other one.

        $left->setDecorators(array(
            'FormElements',
            array('HtmlTag', array('tag' => 'div')),
            ));
    

    Thanks