从奏鸣曲的页面获取块内容

时间:2019-04-05 15:34:00

标签: php symfony sonata

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

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

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

我已经确认可以从CMS的页面中加载块,所以我知道有一种方法。

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

$blocks实体的Page参数是一个实现,因此默认为lazy loaded

如果您希望在随时随地加载任何$block实体时始终加载Page,则可以eager load块,但是由于对性能的影响,不建议这样做(您可能不会这样做)每次加载$blocks实体时都不需要Page

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

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

然后,当您dump($blocks)时,它们不应为空集合。

通常,惰性抓取的集合在使用时即被初始化。在foreach中-这就是它起作用的原因。

答案 1 :(得分:0)

这并不是一个令人满意的答案,但是我发现通过在$page->getBlocks()循环中遍历foreach的结果(而不是仅仅使用dump($page)来查看输出) ,我突然能够访问块的内容!快点!魔法!

    foreach ($page->getBlocks() as $block) {
        $blocks[] = $block;
    }

如果有人想给出更深入的答案,以解释应用程序为何以这种相当神秘的方式运行,我很乐意将其标记为正确的答案。