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).
che ha fatto il trucco: echo 'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini – user846226
Grazie a questo è stato guidare i miei matti per un giorno, con Symphony durante l'esecuzione di phpunits – dmi3y
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