2013-08-07 38 views
1

我的Zend Framework 2下拉列表存在問題&原則。 我會把 「選擇」 屬性我的下拉列表上,但所有選項傳遞給選定的ZF2 - 在選擇元素上設置選定的值

我的代碼:

控制器:

​​

隨着

$localites = $this->getEntityManager()->getRepository("Admin\Entity\Localite")->getArrayOfAll(); 
    $form->get('localiteid')->setValueOptions($localites); 

我正確填充我的下拉列表,通常使用

$form->get('localiteid')->setValue("{$plan->getLocaliteid()->getId()}"); 

只設置「中選擇」選項上的定義如下:

$plan->getLocaliteid()->getId() 

那麼,爲什麼所有的選項在我的下拉列表中選擇?!

信息:它是TYPEID但沒有Statut

回答

0

它可能不是因爲花括號的工作是相同的。按照PHP文檔

使用單一的大括號({})將無法訪問的函數或方法或類常量或靜態類變量的值返回值工作。

這在使用setValue時也是不必要的。在格式化視圖時,ZF2會將其轉換爲字符串。

當您創建陣列傳遞給setValueOptions()你應該讓數組的關聯數組具有以下值:

$form->get('select')->setValueOptions(array(
    'field' => array(
     'value' => 'value_of_the_option', 
     'label' => 'what is displayed', 
     'selected' => true, 
), 
)); 

而且,任何領域的已選定的選項設置爲true會表單元素中的默認選擇。

+0

Thx!我儘快測試它。 – RudySkate

1

個人而言,我不知道是否getArrayOfAll()這樣的函數存在,我認爲你正確地傳遞數組的形式,

,我認爲你應該做這樣的事的設定值。

$form->get('localiteid')->setValue($plan->getLocaliteid()->getId()); 

但是既然你是填充下拉我想這種做法不會有下拉效果最好。你需要做這樣的事情

$form->get('localiteid')->setAttributes(array('value'=>$plan->getLocaliteid()->getId(),'selected'=>true)); 
+0

getArrayOfAll()是一個Repository方法。這是我的Localite RepositoryClass中的一個自定義find()。我將使用@Adrian的方法 – RudySkate

0

我發現了一個錯誤?

$plan = $this->getEntityManager()->getRepository("Admin\Entity\Plan")->find((int)$id); 
$idLocalite = 18;//(int)$plan->getLocaliteid()->getId(); 
$idTypePlan = 2;//(int)$plan->getTypeid()->getId(); 

當我使用$plan->getLocaliteid()->getId();$plan->getTypeid()->getId()到參數傳遞到存儲庫方法getArrayOfAll($idLocalite)

LocaliteRepository。PHP:

class LocaliteRepository extends EntityRepository { 

    public function getArrayOfAll($currentLocaliteId) { 
    $result = $this->_em->createQuery("SELECT l.nom, l.localiteid FROM Admin\Entity\Localite l ORDER BY l.nom")->getArrayResult(); 
    $localite = array(); 
    foreach($result as $loc) { 
     if ($currentLocaliteId == $loc['localiteid']) { 
      $localite[$loc['localiteid']] = array(
        'value' => $loc['localiteid'], 
        'label' => $loc['nom'], 
        'selected' => true, 
      ); 
     } else { 
      $localite[$loc['localiteid']] = array(
        'value' => $loc['localiteid'], 
        'label' => $loc['nom'], 
        'selected' => false 
      ); 
      //$localite[$loc['localiteid']] = $loc['nom']; 
     } 
    } 

    return $localite; 
    } 

}

所以,如果我使用$idLocalite = 18代替$idLocalite = (int)$plan->getLocaliteid()->getId()只想要選項被選中。爲什麼?!

+0

對不起,不太理解這個問題。它只有在你通過18時纔有效?或者當你通過18時選擇錯誤的東西?我建議你在將它傳遞給Select元素之前轉儲$ localite並查看它的結構。如果問題是隻有在傳入18時才能正常工作,那麼獲取$ plan的查詢會出現問題。 – Adrian