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).
Das ist das tat trick: echo 'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini – user846226
Danke, das war meine Nüsse für einen Tag, mit Symphony beim Ausführen von PHPUITs – dmi3y
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