Forms zend形式相关下拉列表

Forms zend形式相关下拉列表,forms,validation,zend-framework,Forms,Validation,Zend Framework,我有两个选择部门和名称的下拉列表 $model = new Application_Model_DbTable_Department(); $departments = $model->fetchAll(); $department = $this->createElement('select','department'); $department->setLabel('Department'); $department->setAttrib('class', 'depa

我有两个选择部门和名称的下拉列表

$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函数,可以在部门发生变化时查找名称。我的问题是在提交表单时如果表单有验证错误,我需要显示所选的名称

在这种情况下,最好在表单实例化后进行表单填充。原因:初始化时几乎不可能获取表单元素的值,因为它们还不存在(即,在
Zend\u表单的
init()方法中)。您可以这样做:

$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->\u getDesignationOptions($departmentId)
的方法签名如下:

protected function _getDesignationOptions($departmentId = null);
这将返回一个值/选项对数组