0

I am trying to populate all the result from DB to zend form but cannot work.

This is my form

    $configsForm= new Zend_Dojo_Form_SubForm();

    $configsForm->setAttribs(array(
        'name'          => 'mandatory',
        'legend'        => 'mandatory',
        'dijitParams'   => array(
            'title'     => $this-> view -> __ ( 'Configs' ),
        )
    ));
    $configsForm->addElement(
        'FilteringSelect',
        'group_id',
        array(
            'label' => $this-> view -> __ ( 'Configs_Group Key' ),
            'required'  => true,
            'value'     => '',
            'multiOptions' => $this->_getConfigOptions(),
            'id'        => 'group_id',
        )
    );
    $configsForm->addElement(
        'ValidationTextBox',
        'option_type',
        array(
            'label'     => $this-> view -> __ ( 'Configs_Option Type If Exist' ),
            'trim'      => true,
            'required'  => false,
            'name'      => 'option_type',
            'id'        => 'option_type',
            'class'     => 'lablvalue jstalgntop',
        )
    );    
    $configsForm->addElement(
        'ValidationTextBox',
        'option_title',
        array(
            'label'     => $this-> view -> __ ( 'Configs_Option Title' ),
            'trim'      => true,
            'required'  => true,
            'class'     => 'lablvalue jstalgntop',
        )
    );
    $configsForm->addElement(
        'ValidationTextBox',
        'option_value',
        array(
            'label'     => $this-> view -> __ ( 'Configs_Option Value' ),
            'trim'      => true,
            'required'  => true,
            'class'     => 'lablvalue jstalgntop',
        )
    );
    $configsForm->addElement(
        'select',
        'option_status',
        array(
            'label'         => $this-> view -> __('Configs_Option Status'),
            'required'      => true,
            'value'         => '',
            'multiOptions'  => array('' => $this -> view -> __('Root'), 0 => 'Disabel', 1 => 'Enabel'),
        )
    );
    $configsForm->addElement(
        'FilteringSelect',
        'locale_id',
        array(
            'label' => $this-> view -> __ ( 'Configs_Locale' ),
            'class' => 'lablvalue jstalgntop',
            'autocomplete'=>false,
            'required'  => true,
            'multiOptions' => $this->_getLocaleOptions(),
            'id' => 'locale_id',
        )
    );
    $configsForm->addElement(
        'ValidationTextBox',
        'option_hint',
        array(
            'label'     => $this-> view -> __ ( 'Configs_Option Hint' ),
            'trim'      => true,
            'required'  => false,
            'class'     => 'lablvalue jstalgntop',
        )
    );
    $configsForm->addElement(
        'ValidationTextBox',
        'option_description',
        array(
            'label'     => $this-> view -> __ ( 'Configs_Option Description' ),
            'trim'      => true,
            'required'  => false,
            'class'     => 'lablvalue jstalgntop',
        )
    );
    $configsForm->addElement(
        'ValidationTextBox',
        'comments',
        array(
            'label'     => $this-> view -> __ ( 'Configs_Option Comments' ),
            'trim'      => true,
            'class'     => 'lablvalue jstalgntop',
            )
    );
    $configsForm->addElement(
        'hidden',
        'id'
    );


    $configsForm->addElement(
        'SubmitButton',
        'submit',
        array(
            'value'     => 'submit',
            'label'     => $this-> view -> __ ( 'Object_Save' ),
            'type'      => 'Submit',
            'ignore'    => true,
            'onclick'   => 'dijit.byId("add-edit").submit()',
        )
    );
    $configsForm->addElement(
        'reset', 
        'reset',
        array(
            'label' => 'Reset',
            'id'    => 'reset',
            'ignore'=> true,
        )
    );

    $configsForm ->setDecorators ( array ('FormElements', array ('HtmlTag', array ('tag' => 'table', 'class'=>'formlist' ) ), 'ContentPane' ) );
    $configsForm->setElementDecorators(array(
    'DijitElement',
    'Errors',
        array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'lable jstalgntop')),
        array('Label', array('tag' => 'td', 'class' => 'lable jstalgntop')),
        array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
    ));

    $this->addSubForm($configsForm, 'configs');
}

And the code in my controller looks like

$form -> populate($configsObjResults);

The $configsObjResults containes

Array
(
    [0] => Array
    (
        [id] => 11
        [group_id] => 2
        [group_key] => advanced
        [option_title] => advanced.iptable.status
    )

    [1] => Array
    (
        [id] => 12
        [group_id] => 2
        [group_key] => advanced
        [option_title] => advanced.memchache.iptable
    )

)
2
  • No but the form didnt populate ! Commented Jun 23, 2012 at 10:25
  • How can I be able to generate required subforms depending on the array count from DB to populate the result ! Commented Jun 23, 2012 at 10:30

1 Answer 1

1

Put your subform code in a method called addConfigSubForm() within your form code, like so:

class myForm extends Zend_Dojo_Form
{
    ...

    // $number - 1st, 2nd, 3rd... subform
    // $data - data to populate
    public function addConfigSubForm($number, $data)
    {
        [ Create your subform here ]

        // populate it with $data
        $configsForm->populate($data);

        // add it to the form
        $this->addSubForm($configsForm, 'configs' . $i);
    }
}

Then in your controller, do the following:

$myform = new myForm();
foreach ($configsObjResults as $i=>$config) {
    $myform->addConfigSubForm($i, $config);
}

This will add a subform for each configs object in your array.

Sign up to request clarification or add additional context in comments.

1 Comment

Stardev you are my MAAAAAN ! Thank you

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.