3

部門と指定を選択するためのフォームに2つのドロップダウンがあります。

$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関数があります。私の問題は、フォームに検証エラーがある場合にフォームを送信するときに、選択した指定を表示する必要があることです。

4

1 に答える 1

1

このような場合は、フォームがインスタンス化された後にフォームの入力を行うのが最適です。理由:フォーム要素の値はまだ存在しないため(つまり、のinit()メソッド内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)次のようになります。

protected function _getDesignationOptions($departmentId = null);

そして、これは値/オプションのペアの配列を返します。

于 2012-10-30T11:20:25.533 に答える