我正在尝试将所有结果从DB填充到zend表单但不能正常工作。
这是我的表格
$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');
}
我的控制器中的代码看起来像
$form -> populate($configsObjResults);
$configsObjResults
包含
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
)
)
答案 0 :(得分:1)
将您的子表单代码放在表单代码中名为addConfigSubForm()
的方法中,如下所示:
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);
}
}
然后在您的控制器中,执行以下操作:
$myform = new myForm();
foreach ($configsObjResults as $i=>$config) {
$myform->addConfigSubForm($i, $config);
}
这将为数组中的每个configs对象添加一个子表单。