Laravel4 получает массив разделов на уровне контроллера/маршрутизатора из шаблона Blade

Мне требуется ваша помощь.

Я только что узнал, что класс \Illuminate\View\Environment имеет защищенный массив $sections и метод получить его getSections(), но он возвращает пустой массив.

Вот как я пытался его получить:

$view = View::make('pages');
$env = $view->getEnvironment();
$env->make('pages');

print($env->getSections());

И результат Array( )

Где я ошибся? Любое предложение будет оценено.


person Simone Lazzari    schedule 12.11.2013    source источник


Ответы (1)


Это потому, что когда вы вызываете $env->make('pages'), представление не обрабатывается сразу. Он обрабатывается только тогда, когда метод render на Вызывается объект $view, который выполняется автоматически, когда вы возвращаете его в качестве ответа, через __toString(). Однако проблема заключается в том, что сразу после отображения страницы, все еще внутри метода render, $sections очищается с помощью flushSections. Таким образом, у вас фактически никогда не будет доступа к нему.

Вы можете попытаться обмануть его, если вызовете incrementRender перед созданием представления, затем создание и визуализация представления, получение разделов и, наконец, decrementRender() и flushSections(), но это может привести к неожиданным результатам. Что-то вроде этого:

// Fool it
$env->incrementRender();
$env->make('pages')->render();

$sections = $env->getSections();

// Clear it
$env->decrementRender();
$env->flushSections();
person rmobis    schedule 12.11.2013