Получить содержимое блока со страницы в сонате - PullRequest
0 голосов
/ 05 апреля 2019

Некоторые коллеги и я используем Sonata Block Bundle в сочетании с Sonata Page Bundle.В нашем интерфейсе мы можем открыть страницу, а затем добавить к ней блоки.Просто.

Теперь я хочу отправлять электронные письма, которые включают заголовок страницы и первый текстовый блок, связанный со страницей.Я использую dump($page) в своем контроллере, чтобы убедиться, что у меня есть доступ к странице.Я извлекаю заголовок со страницы с помощью $page->getTitle().

Но когда я пытаюсь получить информацию о блоке, метод $page->getBlocks() просто возвращает объект, содержащий пустую коллекцию.

Я подтвердил, что могу загружать блоки со страницы в CMS, поэтому я знаю, что есть способ сделать это.

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 07 апреля 2019

Параметр $blocks объекта Page является реализацией, поэтому по умолчанию это загружено с отложенной загрузкой .

Если вы хотите, чтобы $block всегда загружался при загрузке любого объекта Page в любом месте, вы можете быстро загрузить блоков, однако это не рекомендуется из-за влияния на производительность (вы, вероятно, этого не делаете нужно $blocks каждый раз, когда вы загружаете Page сущность).

Другой способ, если загруженный $blocks - это инициализировать коллекцию вручную, например:

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

Тогда, когда вы dump($blocks), они не должны быть пустой коллекцией.

Обычно отложенные коллекции инициализируются в момент их использования, например в foreach - вот почему это сработало.

0 голосов
/ 05 апреля 2019

Это не совсем удовлетворительный ответ, но я обнаружил, что, перебирая результаты $page->getBlocks() в цикле foreach (а не просто используя dump($page) для просмотра результатов), я внезапно смогполучить доступ к содержимому блоков!Presto!Магия!

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

Если кто-то захочет дать более подробный ответ, объясняющий, почему приложение ведет себя таким довольно загадочным образом, я буду рад отметить его как правильный ответ.

...