這是使用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,所以我不知道爲什麼這不工作。
symfony團隊已經知道這個bug嗎? – Chris
請參閱:https://github.com/propelorm/Propel/issues/789 – Chris