7

EDIT: Für alle mit Interesse auf das gleiche Problem zu lösen, dass der Trick:Sonata: Fatal error: Maximale Funktion Verschachtelungsebene von '100' erreicht .. beim Einbetten Formen

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

Ich habe 3 Admins für 3 miteinander verknüpfte Entitäten erstellt, wobei A Admin B Admin einbettet und B Admin C Admin einbettet. B-Entität hat eine ManyToOne-Beziehung mit A- und B-Entität.

A Entität B Entität mit dem folgenden Code einbettet:

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

B Entität bettet C Entität mit dem folgenden:

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

Anmerkung: 'edit' => 'list' zugunsten von 'edit' => 'standard' Ändern vermeidet die folgenden Fehler .

Platzieren array('edit' => 'list') auf B Admin-Entität auf einem sonata_type_model Formulartyp gibt den folgenden Fehler beim Bearbeiten von Eindeutigkeit. Wenn stattdessen array('edit' => 'standard') verwendet wird, dann ist kein Fehler ausgegeben:

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

Die schwierige oder Merkwürdige ist, dass egal ob bearbeiten ist Liste oder Standard, wenn ich zu B Admin gehen, um es zu bearbeiten. Das Problem tritt nur auf, wenn ich das in A eingebettete B mit der Optionsliste für die Bearbeitungsliste bearbeite. Und das passiert mir in einigen anderen Entitäten, wo ich dasselbe Verhalten implementiert habe.

Hier sind A, B und C Einheit und wie sie verknüpfen einander:

A Einheit:

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

B Einheit:

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

C Entität:

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

Um ein Klo zu nehmen Sie können das Sonata-Demoprojekt verwenden, um nach einem ähnlichen Verhalten zu suchen.
Wie Sie sehen können, ist es der gleiche Anwendungsfall, der auf Sonata Project Demo gefunden werden kann, wo Gallery gegen GalleHasMedias verlinkt ist: Wie Sie sehen können, hat GalleryHasMedia eine ManyToOne Beziehung mit Gallery und eine andere mit Media so Wenn Sie eine Galerie bearbeiten, können Sie eine sonata_type_model mit edit' => 'inline','inline' => 'table', sehen, so dass GalleryHasMedia in das Gallery-Formular eingebettet ist, um neue Medien hinzufügen zu können, die mit der aktuellen Gallery verknüpft und in GalleryHasMedia gespeichert werden.

Hat jemand eine Situation wie die exponierte konfrontiert? Hoffe, jemand könnte auf die richtige Richtung zeigen oder helfen, eine Ahnung zu bekommen, was vor sich geht.

PD: Für mich sieht es so aus, als würden sich B- und C-Entitäten in einer Endlosschleife miteinander verbinden/einbetten. Aber wie gesagt, 3 Admins funktionieren gut getrennt (während A B nicht einbettet).

+0

Das ist das tat trick: echo 'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini – user846226

+0

Danke, das war meine Nüsse für einen Tag, mit Symphony beim Ausführen von PHPUITs – dmi3y

+0

Anstatt Ihre Frage mit Ihrer Lösung zu bearbeiten bitte Stellen Sie eine tatsächliche Antwort zur Verfügung, damit die Gemeinschaft diesen qu kennt Estion ist gelöst. – lifo

Antwort

0

Für alle mit Interesse auf das gleiche Problem zu lösen, dass der Trick:

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

Dies ist ein häufiges Problem bei Servern mit xdebug. Sie müssen die Verschachtelungsebene erhöhen, indem Sie den Wert xdebug.max_nesting_level in Ihrer Konfiguration xdebug.ini erhöhen.Es sollte auf 250 eingestellt werden.

Eine schnelle Möglichkeit der Einstellung hinzuzufügen, ist dies auf Ihrem Linux-Server zu tun:

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

Danke für die Antwort lifo aber wie du schon bemerkt haben solltest war es schon über edit behoben. – user846226