编辑:对于有兴趣解决相同问题的任何人,这都成功了:
echo `'xdebug.max_nesting_level = 250' >> /etc/php5/conf.d/xdebug.ini`
我为彼此链接的 3 个实体创建了 3 个管理员,其中 A 管理员嵌入了 B 管理员,而 B 管理员嵌入了 C 管理员。B 实体与 A 和 B 实体具有多对一关系。
A 实体嵌入 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'
避免以下错误。
在编辑 A 实体时,将 B Admin 实体放置array( 'edit' => 'list' )
在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 admin 编辑它。仅当我使用编辑列表选项集编辑嵌入到 A 中的 B 时才会出现问题。这发生在我实施相同行为的其他一些实体中。
以下是 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;
}
为了能够查看所有内容,您可以使用奏鸣曲演示项目来检查类似的行为。
如您所见,它与 Sonata Project 演示中的用例相同,其中 Gallery 链接到 GalleHasMedias,而 GalleHasMedias 链接到 Media:http ://demo.sonata-project.org/admin/sonata/media/gallery/255 /edit?context=default正如你所看到的,GalleryHasMedia 与 Gallery 有一个 ManyToOne 关系,另一个与 Media 有关系,所以当你编辑一个 Gallery 时,你可以看到一个sonata_type_model
withedit' => 'inline','inline' => 'table',
所以 GalleryHasMedia 被嵌入到 Gallery 表单中,以便能够添加新的将与当前图库链接并存储在其中的媒体GalleryHasMedia
。
有没有人遇到过类似暴露的情况?希望有人可以指出正确的方向或帮助了解正在发生的事情。
PD:对我来说,B 和 C 实体似乎在无限循环中相互链接/嵌入。但如前所述,3 个管理员分别工作得很好(而 A 没有嵌入 B)。