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).
to zrobił podstęp: echo "xdebug.max_nesting_level = 250" >> /etc/php5/conf.d/xdebug.ini – user846226
Dzięki, że to jeździło mi przez jeden dzień, z Symphony podczas uruchamiania phpunits – dmi3y
Zamiast edytować pytanie z rozwiązaniem, proszę podać rzeczywistą odpowiedź, aby społeczność znała to pytanie estion został rozwiązany. – lifo