首页 > 解决方案 > 从 Sonata 中的页面获取块内容

问题描述

我和一些同事正在将 Sonata Block Bundle 与 Sonata Page Bundle 结合使用。在我们的界面中,我们可以打开一个页面,然后向其中添加块。简单的。

现在我想发送包含页面标题和与页面相关的第一个文本块的电子邮件。我dump($page)在我的控制器中使用来验证我是否可以访问该页面。我通过从页面中提取标题$page->getTitle()

但是当我尝试检索块信息时,该$page->getBlocks()方法只返回一个包含空集合的对象。

我已经验证我可以从 CMS 中的页面加载块,所以我知道有办法做到这一点。

我究竟做错了什么?

标签: phpsymfonysonata

解决方案


实体的$blocks参数Page是一个实数,因此默认是延迟加载的。

如果您希望在任何地方加载任何实体$block时始终加载,您可以预先加载块,但是由于性能影响,不建议这样做(您可能不需要每次加载实体时都需要)。Page$blocksPage

$blocks如果加载,另一种方法是手动初始化集合,如下所示:

$blocks = $page->getBlocks();
$blocks->initialize();

然后,当你dump($blocks)他们不应该是一个空集合。

通常,惰性获取的集合在它们被使用的那一刻被初始化,例如在 foreach 中——这就是它起作用的原因。


推荐阅读