2012-04-17 13 views
10

W ramach mojego projektu Symfony2 mam próby do dynamicznego generowania jednostki używane w moim rodzaju formy, z pominięciem użycia konstruktora zapytań itpNielegalne przesunięcia wpisz isset lub pusty w linii EntityChoiceList.php 273

Aby on entity choice property Dostarczam zestaw encji do użycia. Podczas ładowania strony wszystko wydaje się w porządku i wyświetla się właściwa treść. Jednak po złożeniu formularza uzyskać

Nielegalne przesunięcie typu w isset lub pusty w linii EntityChoiceList.php 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; 
      ..... 

Co mi jest zakłopotany, gdy dodam var_dump (isset ($ this-> entity [$ key])); exit; powyżej tej linii zwracam "bool (true)", co oznacza dla mnie, że klucz istnieje.

Jako tło próbowałem przedłużyć EntityType, dla ułatwienia w moim projekcie i dodał:

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; 
}  

Czy ktoś jakieś pomysły dlaczego otrzymuję ten błąd, albo idę na temat mojego problemu wszystko źle i tak , próbując przekazać szereg podmiotów do wyborów?

Odpowiedz

-2

Zgaduję, że już rozwiązałeś to w inny sposób, a to nie jest prawdziwa odpowiedź.

Ale zgaduję, że albo $ entity nie jest tablicą w tym punkcie, albo $ key nie jest wartością skalarną. Do debugowania należy użyć:

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

Jak już przetestowane, to zatrzyma się na pierwszym piłkę z tej funkcji. Symfony Forms używają wielu programów rekurencyjnych, więc wyjście w dowolnej funkcji zwykle nie pomaga.

43

Jeśli otrzymujesz to, starając się usunąć element z ArrayCollection To pewnie dlatego, że wpisane:

$list->remove($item) zamiast $list->removeElement($item)

+7

czuję się naprawdę głupi za marnowanie 2 godziny w tej sprawie. Zdecydowanie powinien przestać działać "do późna! : D – tftd

+0

Dlaczego ta odpowiedź nie została przyjęta? To działa dokładnie! – Sithu