EDIT: Для тех, кто заинтересован в решении тот же вопрос, что сделал трюк:Sonata: Фатальная ошибка: Максимальный уровень вложенности функции из '100' достиг .. когда встраивание формы
echo `'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini`
Я создал 3 Admins для 3 сущностей, связанных друг с другом, где Admin встраивает B Admin и B Admin внедряет C Admin. B имеет отношение ManyToOne к объекту A и B.
объект встраивается B объект со следующим кодом:
$formMapper->add('b', 'sonata_type_collection', array(
'by_reference' => false
), array(
'edit' => 'inline',
'inline' => 'table',
'sortable' => 'position'
));
B объект встраивается C объект со следующим:
$formMapper->add('c', 'sonata_type_model', array(
'required' => true,
'label' => ucfirst($this->trans('c', array(), $this->translationDomain, $this->langCode))
), array('edit' => 'list'));
Примечание: изменение 'edit' => 'list'
в пользу 'edit' => 'standard'
избегает следующее сообщение об ошибке ,
Размещение array('edit' => 'list')
на B Объект администратора на форме формы sonata_type_model
дает следующую ошибку при редактировании. Если вместо array('edit' => 'standard')
используется, то никакой ошибки не выводится:
Sonata: Fatal error: Maximum function nesting level of '100' reached, aborting! in myProject/vendor/doctrine-common/lib/Doctrine/Common/Lexer.php on line 756
Хитрость или Любопытно, что независимо от того, правка списка или стандартной, если я иду к B администратора, чтобы изменить его. проблема возникает только в том случае, если я редактирую B, встроенный в A с установленным параметром списка редактирования. И это происходит со мной в некоторых других объектах, где я реализовал одно и то же поведение.
Здесь A, B и C сущность и как они связаны друг с другом:
лицо:
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 объект:
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 объект:
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;
}
Для того, k на нем все вы можете использовать демонстрационный проект sonata для проверки аналогичного поведения.
Как вы можете видеть, это тот же пример использования, который можно найти в демонстрации Sonata Project, где Gallery связана с GalleHasMedias, которая ссылается на Media: http://demo.sonata-project.org/admin/sonata/media/gallery/255/edit?context=default Как вы можете видеть, GalleryHasMedia имеет отношение ManyToOne к Gallery, а другое - к Media, поэтому когда вы редактируете галерею, вы можете увидеть sonata_type_model
с edit' => 'inline','inline' => 'table',
, поэтому GalleryHasMedia встроена в форму Галереи, чтобы иметь возможность добавлять новые Medias, которые будут связаны с текущей галереей и хранятся внутри GalleryHasMedia
.
Есть ли кто-нибудь, столкнувшийся с ситуацией, подобной разоблаченной? Надеюсь, кто-то может указать на правильное направление или помочь понять, что происходит.
PD: Для меня кажется, что объекты B и C связывают/встраивают друг друга в бесконечный цикл. Но, как сказано, 3 админа работают отлично по отдельности (в то время как A не вставляет B).
, что сделал trick: echo 'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini – user846226
Спасибо, что это заводило мои орехи в течение дня, с Symphony во время работы phpunits – dmi3y
Вместо того, чтобы редактировать свой вопрос с помощью своего решения, пожалуйста дать реальный ответ, так что сообщество знает это qu эстион решается. – lifo