7

EDIT: Per chiunque sia interessato a risolvere lo stesso problema, che ha fatto il trucco:Sonata: Fatal error: Livello massimo la funzione di nidificazione del '100' ha raggiunto .. quando forme incorporamento

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

Ho creato 3 amministratori per 3 entità collegate tra loro, in cui un amministratore è incorporato nell'amministratore B e l'amministratore B incorpora l'amministratore C. L'entità B ha una relazione ManyToOne con l'entità A e B.

Un'entità ingloba soggetto B con il seguente codice:

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

entità B incorpora entità C con la seguente:

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

Nota: cambiando 'edit' => 'list' a favore della 'edit' => 'standard' evita il seguente errore .

Posizionamento array('edit' => 'list') su B Entità amministratore su un tipo di modulo sonata_type_model dà il seguente errore durante la modifica di A enity. Se invece si utilizza array('edit' => 'standard') allora nessun errore viene emesso:

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

La cosa più difficile o curiosa è che non importa se di modifica è la lista o standard se vado a B di amministrazione di modificarla. il problema appare solo se ho modificato B incorporato in A con l'opzione di modifica dell'elenco. E questo mi sta accadendo in alcune altre entità in cui ho implementato lo stesso comportamento.

Qui ci sono A, B e C entità e come si collegano l'un l'altro:

Un'entità:

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

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

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

Per essere in grado di prendere un gabinetto A questo punto è possibile utilizzare il progetto demo sonata per verificare un comportamento simile.
Come si può vedere è lo stesso caso d'uso che può essere trovato nella demo di Sonata Project in cui Gallery è collegato a GalleHasMedias che si collega a Media: http://demo.sonata-project.org/admin/sonata/media/gallery/255/edit?context=default Come si può vedere, GalleryHasMedia ha una relazione ManyToOne con Gallery e un'altra con Media così quando modifichi una Galleria puoi vedere un sonata_type_model con edit' => 'inline','inline' => 'table', in modo che GalleryHasMedia sia incorporato nel modulo Galleria per poter aggiungere nuovi Media che verranno collegati alla Galleria corrente e memorizzati all'interno di GalleryHasMedia.

Qualcuno ha affrontato una situazione come quella esposta? Spero che qualcuno possa indicare la direzione giusta o aiutare a capire cosa sta succedendo.

PD: Per me sembra che le entità B e C si colleghino/si incorpori l'un l'altro in un ciclo infinito. Ma come detto, 3 amministratori lavorano alla grande separatamente (mentre A non incorpora B).

+0

che ha fatto il trucco: echo 'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini – user846226

+0

Grazie a questo è stato guidare i miei matti per un giorno, con Symphony durante l'esecuzione di phpunits – dmi3y

+0

Invece di modificare la tua domanda con la soluzione per favore fornire una risposta reale in modo che la comunità sappia questo qu la soluzione è risolta. – lifo

risposta

0

Per chiunque sia interessato a risolvere lo stesso problema, che ha fatto il trucco:

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

Questo è un problema comune con i server che eseguono xdebug. È necessario aumentare il livello di nidificazione aumentando xdebug.max_nesting_level nella configurazione di xdebug.ini.Impostarlo su qualcosa come 250 dovrebbe essere sufficiente.

Un modo rapido per aggiungere l'impostazione è quello di fare questo sul vostro server Linux:

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

Grazie per la risposta lifo ma come già dovresti notare è stato già risolto tramite modifica. – user846226