zend form dependent dropdown

时间:2012-10-30 10:45:07

标签: forms validation zend-framework

我在表单中有两个下拉列表,用于选择部门和名称。

$model = new Application_Model_DbTable_Department();
$departments = $model->fetchAll();
$department = $this->createElement('select','department');
$department->setLabel('Department');
$department->setAttrib('class', 'department');
foreach($departments as $d)
    $department->addMultiOption($d->id, $d->depname);

$model = new Application_Model_DbTable_Designation();
$designations = $model->fetchAll('depid=1');
$designation = $this->createElement('select','designation');
$designation->setLabel('Designation');
$designation->setAttrib('class', 'designation');
$designation->setRegisterInArrayValidator(false);
foreach($designations as $ds)
    $designation->addMultiOption($ds->id, $ds->designation);

我在部门更改时有指定查找的jquery功能。我的问题是,如果表单有验证错误,提交表单时,我需要显示所选的名称。

1 个答案:

答案 0 :(得分:1)

在这种情况下,最好在实例化表单后执行表单填充。原因:几乎不可能在初始化时获取表单元素的值,因为它们尚不存在(即,init()的{​​{1}}方法)。你可以这样做:

Zend_Form

这将是你的控制器动作或其他东西......但实质上,你的指定选项会从当前部门获取值,如果可以从帖子获得,否则它将落入默认选择。 $form = new Your_Zend_Form(); $designation = $form->getElement('designation'); $departmentId = null; $request = $this->getRequest(); if($request->isPost()){ $departmentId = $request->getPost('department'); } $desigantionOptions = $this->_getDesignationOptions($departmentId); $designation->addMultiOptions($desigantionOptions); 的方法签名如下:

$this->_getDesignationOptions($departmentId)

这将返回一个值/选项对的数组。