2013-11-26 72 views
1

具有呈以下代碼:Symfony2的 - 更多的選擇(形式)不設置默認值(S)

 ->add('groups', 'model', array(
       'class' => 'FOS\UserBundle\Propel\Group', 
       'required' => true, 
       'multiple' => true, 
       'expanded' => true, 
       'query' => GroupQuery::create()->orderByName(), 
     )) 

這正確呈現的複選框,但不設置defaultvalues。 當我設置「expanded => false」時,它變成了一個選擇列表,但默認值設置正確.. Symfony中的錯誤?

回答

0

這是使用propel而不是doctrine的錯誤。

我和你有同樣的問題,並發現它爲什麼不工作。
vendor/symfony/symfony/src/Symfony/Component/Form/Extension/Core/ChoiceList/ChoiceList.php中有一個名爲getValuesForChoices的函數。
該函數將2個對象與'==='進行比較。在教義中,這種方法有效,但如果使用Propel則返回false。

public function getValuesForChoices(array $choices) 
{ 
    $choices = $this->fixChoices($choices); 
    $values = array(); 

    foreach ($choices as $i => $givenChoice) { 
     foreach ($this->choices as $j => $choice) { 
      if ($choice === $givenChoice) { 
       $values[$i] = $this->values[$j]; 
       unset($choices[$i]); 

       if (0 === count($choices)) { 
        break 2; 
       } 
      } 
     } 
    } 

    return $values; 
} 

這是失敗的功能。 所述比較將失敗,因爲對象有差異數字 例如: 它改掉到比較這: 對象(供應商\捆綁\模型\標籤)#506 對象(供應商\捆綁\模型\標籤)#397

注意:這不是一個修復,而是解釋問題。

每當我使用的推進功能檢查,如果對象是相等的,複選框被填充:

public function getValuesForChoices(array $choices) 
{ 
    $choices = $this->fixChoices($choices); 
    $values = array(); 
    foreach ($choices as $i => $givenChoice) { 

     foreach ($this->choices as $j => $choice) { 

      if ($choice->equals($givenChoice)) { 
       $values[$i] = $this->values[$j]; 
       unset($choices[$i]); 

       if (0 === count($choices)) { 
        break 2; 
       } 
      } 
     } 
    } 

    return $values; 
} 

另一個有趣的事情是推進的InstancePooling。

從文檔:
http://propelorm.org/Propel/documentation/03-basic-crud.html#propel-instance-pool

行走保持你已經在 存儲器中取出,以避免調用相同的請求兩次在PHP腳本中的對象的列表。此 列表稱爲實例池,並自動從您的過去請求中填入 。每當通過findPk或findOneById(其中 是前者的別名)使用其主鍵搜索 時,都會查詢實例池。

但是,我只是一個初學者,我不太瞭解propel和symfony,所以我不知道爲什麼這不工作。

+0

symfony團隊已經知道這個bug嗎? – Chris

+0

請參閱:https://github.com/propelorm/Propel/issues/789 – Chris