7

EDIT: Dla wszystkich zainteresowanych w rozwiązywaniu ten sam problem, że wystarczyły:Sonata: Fatal error: Maksymalny poziom zagnieżdżenia funkcji z '100' osiągnął .. podczas osadzania formy

echo `'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini` 

Stworzyłem 3 administratorów dla 3 połączonych ze sobą encji, w których Administrator wstawia B-admin, a B-admin osadza C-Administratora. Jednostka B ma relację ManyToOne z jednostką A i B.

Podmiot osadza podmiot B z następującego kodu:

$formMapper->add('b', 'sonata_type_collection', array(
    'by_reference' => false 
), array(
    'edit' => 'inline', 
    'inline' => 'table', 
    'sortable' => 'position' 
)); 

podmiot B osadza jednostkę C na następujący:

$formMapper->add('c', 'sonata_type_model', array( 
    'required' => true, 
    'label'  => ucfirst($this->trans('c', array(), $this->translationDomain, $this->langCode)) 
    ), array('edit' => 'list')); 

Uwaga: Zmiana 'edit' => 'list' na rzecz 'edit' => 'standard' unika się następujący błąd .

Umieszczanie array('edit' => 'list') na elemencie administratora na typ formularza sonata_type_model powoduje pojawienie się następującego błędu podczas edytowania obiektu. Jeśli zamiast array('edit' => 'standard') służy wówczas błąd nie jest wyjście:

Sonata: Fatal error: Maximum function nesting level of '100' reached, aborting! in myProject/vendor/doctrine-common/lib/Doctrine/Common/Lexer.php on line 756 

Tricky lub Ciekawostką jest, że bez względu na to, czy zmiana jest lista lub norma jeśli pójdę do B administratora, aby go edytować. problem pojawia się tylko wtedy, gdy edytuję B osadzone na A z ustawioną opcją listy edycji. I to mi się przydarza w niektórych innych jednostkach, w których zaimplementowałem to samo zachowanie.

Oto jednostka A, B i C oraz w jaki sposób połączyć ze sobą:

Podmiot:

class A 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer", length=4) 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 
    /** @ORM\OneToMany(targetEntity="B", mappedBy="a", cascade={"persist"}, orphanRemoval=true) */ 
    protected $b; 
} 

podmiot B:

class B 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer", length=4) 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id 
    /** 
    * @ORM\ManyToOne(targetEntity="C", inversedBy="b", cascade={"persist"}) 
    * @ORM\JoinColumn(name="c_id", nullable=false, referencedColumnName="id", onDelete="CASCADE") 
    */ 
    private $c; 
    /** 
    * @ORM\ManyToOne(targetEntity="A", inversedBy="b", cascade={"persist"}) 
    * @ORM\JoinColumn(name="a_id", nullable=false, referencedColumnName="id", onDelete="CASCADE") 
    */ 
    private $a; 
} 

jednostka C:

Class C 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer", length=4) 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 
    /** @ORM\OneToMany(targetEntity="B", mappedBy="c", cascade={"persist"}) */ 
    private $b; 
} 

Aby móc wziąć kibel W tym wszystkim możesz użyć projektu demo sonata, aby sprawdzić podobne zachowanie.
Jak widać, jest to ten sam przypadek użycia, który można znaleźć w demo Sonata Project, gdzie galeria jest połączona z GalleHasMedias, która łączy się z Media: http://demo.sonata-project.org/admin/sonata/media/gallery/255/edit?context=default Jak widać, GalleryHasMedia ma relację ManyToOne z Galerią i inną z Media, więc podczas edycji ou Gallery można zobaczyć sonata_type_model z edit' => 'inline','inline' => 'table', więc GalleryHasMedia jest osadzony wewnątrz postaci galerii, aby móc dodawać nowe Medias, które będzie połączone z bieżącym galerii i przechowywane wewnątrz GalleryHasMedia.

Czy ktoś miał do czynienia z sytuacją podobną do tej ujawnionej? Mam nadzieję, że ktoś wskaże właściwy kierunek lub pomoże zorientować się, co się dzieje.

PD: Dla mnie wydaje się, że podmioty, B i C są linkami/osadzanie siebie w nieskończonej pętli. Ale, jak powiedziano, 3 administratorów działa świetnie oddzielnie (podczas gdy A nie osadza B).

+0

to zrobił podstęp: echo "xdebug.max_nesting_level = 250" >> /etc/php5/conf.d/xdebug.ini – user846226

+0

Dzięki, że to jeździło mi przez jeden dzień, z Symphony podczas uruchamiania phpunits – dmi3y

+0

Zamiast edytować pytanie z rozwiązaniem, proszę podać rzeczywistą odpowiedź, aby społeczność znała to pytanie estion został rozwiązany. – lifo

Odpowiedz

0

Dla wszystkich zainteresowanych w rozwiązywaniu ten sam problem, że wystarczyły:

echo `'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini` 
5

Jest to typowy problem występujący na serwerach z systemem xdebug. Musisz zwiększyć poziom zagnieżdżenia, zwiększając liczbę xdebug.max_nesting_level w konfiguracji xdebug.ini.Ustawienie wystarczające do 250 powinno wystarczyć.

Jeden szybki sposób dodać ustawienie jest to zrobić na serwerze Linux:

echo `'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini` 
+0

Dziękuję za odpowiedź lifo, ale jak już zauważyłeś, została już rozwiązana poprzez edycję. – user846226