7

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).

+0

, что сделал trick: echo 'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini – user846226

+0

Спасибо, что это заводило мои орехи в течение дня, с Symphony во время работы phpunits – dmi3y

+0

Вместо того, чтобы редактировать свой вопрос с помощью своего решения, пожалуйста дать реальный ответ, так что сообщество знает это qu эстион решается. – lifo

ответ

0

Для тех, кто заинтересован в решении того же вопроса, что сделал трюк:

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

Это распространенная проблема с серверами, на которых работает xdebug. Вы должны увеличить уровень вложенности, увеличив xdebug.max_nesting_level в конфигурации xdebug.ini.Установка его на что-то вроде 250 должна быть достаточной.

Один быстрый способ добавить настройку, чтобы сделать это на Linux сервере:

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

Спасибо за ответ lifo, но, как вы уже заметили, он уже был разрешен путем редактирования. – user846226