7

編輯:任何有興趣在解決同樣的問題,該訣竅:索納塔:致命錯誤:「100」達到最大功能嵌套層次..當嵌入形式

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

我爲3個實體創建了3個管理員,這3個實體彼此鏈接,其中A管理員嵌入了B管理員,B管理員嵌入了C管理員。 B實體與A和B實體具有ManyToOne關係。

甲實體嵌入乙實體用下面的代碼:

$formMapper->add('b', 'sonata_type_collection', array(
    'by_reference' => false 
), array(
    'edit' => 'inline', 
    'inline' => 'table', 
    'sortable' => 'position' 
)); 

乙實體嵌入具有以下一種C實體:

$formMapper->add('c', 'sonata_type_model', array( 
    'required' => true, 
    'label'  => ucfirst($this->trans('c', array(), $this->translationDomain, $this->langCode)) 
    ), array('edit' => 'list')); 

注:贊成'edit' => 'standard'改變'edit' => 'list'避免以下錯誤。

在B上配置array('edit' => 'list')sonata_type_model表單類型的管理實體在編輯A enity時出現以下錯誤。相反,如果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; 
} 

乙實體:

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; 
} 

Ç實體:

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 Project演示中找到,其中Gallery鏈接到與媒體鏈接的GalleHasMedias:http://demo.sonata-project.org/admin/sonata/media/gallery/255/edit?context=default如您所見,GalleryHasMedia與Gallery有一個ManyToOne關係,當您編輯圖庫時,您可以看到sonata_type_modeledit' => 'inline','inline' => 'table',,因此GalleryHasMedia被嵌入到圖庫表格中,以便能夠添加將與當前圖庫鏈接並存儲在GalleryHasMedia內部的新媒體。

有沒有人遇到暴露的情況?希望有人能指出正確的方向或幫助弄清楚發生了什麼。

PD:對我來說,好像B和C實體正在無限循環地鏈接/嵌入對方。但如前所述,3個管理員分別工作得很好(而A不嵌入B)。

+0

這做的技巧:echo'xdebug.max_nesting_level = 250'>> /etc/php5/conf.d/xdebug.ini – user846226

+0

感謝這是我的堅果一天,與Symphony同時運行phpunits – dmi3y

+0

而不是用你的解決方案編輯你的問題,請提供實際的答案,以便社區知道這個問題estion已解決。 – lifo

回答

0

任何有興趣在解決同樣的問題,該訣竅:

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

這是運行xdebug的服務器的常見問題。您必須通過增加xdebug.ini配置中的xdebug.max_nesting_level來提高嵌套級別。將它設置爲250就足夠了。

一個快速的方法來添加的設置是這樣做你的Linux服務器上:

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

感謝您的解答,但您已經注意到它已經通過編輯解決了。 – user846226

相關問題