3

編輯表單中的所有字段時,除了下拉菜單之外正確填充了所有字段,我無法弄清楚什麼是錯誤。無法爲Zend_Form下拉元素設置選定的值

這裏是我的形式

 $katModel = new Model_Kategoria(); 
     $kategorie = $katModel->getKategorie(0); 

     $katList = new External_Form_Element_SelectAttribs('kategoria'); 
     $katList->setLabel('Kategoria: '); 
     $katList->isRequired(true); 
     if(isset($kategorie)) { 
      foreach($kategorie as $k) { 
       $katList->addOption($k['id'], $k['kategoria'], array('class' => 'level-' . $k['depth'])); 
      } 
     } 
     $this->addElement($katList); 

我使用自定義元素,所以我可以添加類 「選項」

class External_Form_Element_SelectAttribs extends Zend_Form_Element { 

public $options = array(); 

public $helper = 'selectAttribs'; 

/** 
* Adds a new <option> 
* @param string $value value (key) used internally 
* @param string $label label that is shown to the user 
* @param array $attribs additional attributes 
*/ 
public function addOption ($value,$label = '',$attribs = array()) { 
    $value = (string) $value; 
    if (!empty($label)) $label = (string) $label; 
    else $label = $value; 
    $this->options[$value] = array(
     'value' => $value, 
     'label' => $label 
    ) + $attribs; 
    return $this; 
} 
} 

在我的控制器的編輯操作我有

$zadanie = $zadanieModel->find($id)->current(); 
$zadanieForm->populate($zadanie->toArray()); 

其中所有的字段都是相同的,除了一個

我試過

$zadanieForm->kategoria->setValue(7); 
$zadanieForm->setDefault('kategoria', 7); 

但它沒有奏效。

現在我猜測它與我正在使用的自定義元素(在谷歌上找到的代碼)的東西,但我不知道如何修改它,所以它會爲我工作。

+0

這個代碼的工作依賴於這個「selectAttribs」視圖助手了。你可以在那裏展示什麼? – Michael

+1

你是絕對正確的,問題出在助手身上。它非常混亂,作者使用原始的zend函數來渲染元素並刪除了很多功能,包括設置「selected」屬性。幸運的是,我能夠修復它 – kasztelan

+1

寫一個答案給你自己的問題,並接受它! – markus

回答

1

我用下面的代碼來創建數字下拉從1到10 然後我選擇9默認:

$var = new Zend_Form_Element_Select('ElementName'); 

    for ($i = 1; $i <=10; $i++) { 
     $priority->addMultiOption($i,$i); 
    } 

    $priority->setValue(9);