2012-10-30 80 views
3

我有兩個下拉選擇部門和指定的形式。zend形式依賴下拉

$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

在這樣的情況下,最好在窗體實例化後進行窗體填充。原因:幾乎不可能在初始化時獲取表單元素的值,因爲它們還不存在(即,在Zend_Forminit()方法中)。你可以這樣做:

$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)方法簽名將是如下:

protected function _getDesignationOptions($departmentId = null); 

而這將返回值/選項對的陣列。