2012-04-17 70 views
10

在我的Symfony2的項目,我已經嘗試動態生成我的表單類型中使用的實體,繞過使用查詢生成器等非法偏移類型isset或空在EntityChoiceList.php線273

向他實體的選擇屬性我提供了一系列要使用的實體。在頁面加載一切看起來很好,並顯示正確的內容。但是在表單提交我得到EntityChoiceList.php線

非法偏移類型在isset或空273

at ErrorHandler ->handle ('2', 'Illegal offset type in isset or empty', 
'..../Symfony/Bridge/Doctrine/Form/ChoiceList/EntityChoiceList.php', '273', array('key'  => object(myEntity))) in ..../Symfony/Bridge/Doctrine/Form/ChoiceList/EntityChoiceList.php at line 273 
      ..... 
      return isset($entities[$key]) ? $entities[$key] : null; 
      ..... 

發生了什麼我難倒是,如果我添加的var_dump(isset($這個 - >實體[$關鍵]));退出;在這條線上方,我返回'bool(true)',這對我來說意味着密鑰確實存在。

作爲背景我曾嘗試我的項目中擴展的EntityType,爲便於並補充說:

public function getDefaultOptions(array $options) 
{ 
    $defaultOptions = array(
     'em'    => null, 
     'class'    => 'Acme\TestBundle\Entity\myEntity', 
     'property'   => null, 
     'query_builder'  => null, 
     'choices'   => $this->myEntityArray, 
    ); 

    $options = array_replace($defaultOptions, $options); 
    $defaults = parent::getDefaultOptions($options);   
    return $defaults; 
}  

有沒有人任何想法,爲什麼我收到此錯誤,或者我要對我的問題都錯了呢,試圖將一組實體傳遞給選擇?

回答

-2

我猜你已經解決了這個問題,這也不是真正的答案。

但我猜測$實體不是在這一點上的數組,或$ key不是標量值。 爲了調試,你應該使用:

<?php 
if (!is_array($entities) || !is_scalar($key)) { 
    var_dump($key, $entities));exit; 
} 

你現在如何測試這一點,它將停止在該函數的第一關。 Symfony Forms使用退出了很多遞歸,所以任何函數的退出通常都不會幫助你。

43

如果您收到此同時努力,因爲你已經輸入從一個ArrayCollection它可能刪除元素:的

$list->remove($item)代替$list->removeElement($item)

+7

我覺得在這浪費2小時非常愚蠢的。一定要停止工作'直到晚! :D – tftd 2014-10-05 01:27:21

+0

爲什麼不接受這個答案?這完全正確! – Sithu 2017-07-08 07:12:35