Макет не рендер на некоторых действиях в Zend Expressive?

Можно ли установить макет без визуализации в одном действии (или наборе действий)?

Как я знаю, я могу установить макет по умолчанию в конфигурации,
который будет отображаться на каждой странице.
Я могу изменить его в Action Bay, передав переменную ‘layout’ со значением,
но можно ли вообще не рендерить макет?

class IndexAction
{
private $template;

public function __construct(Template $template){ ... }

public function __invoke($request, $response, $next = null)
{
if(!$request->hasHeader('X-Requested-With')){
$data = ['layout' => 'new\layout']; //change default layout to new one
}
else{
$data = ['layout' => false]; //I need only to return view ?
}

return new HtmlResponse($this->template->render(
'web::index', $data
));
}
}

0

Решение

Действия и шаблоны в Zend Expressive являются индивидуальными, поэтому я считаю, что решение о том, следует ли отображать макет, следует принимать в соответствующем шаблоне. В основном, это вопрос пропуска <?php $this->layout('layout::default'); ?> из вашего шаблона действий.

В вашем конкретном примере это условие, которое у вас есть, должно привести к выбору другого шаблона для рендеринга (тот, который не включает в себя макет) вместо решения с отправкой флага шаблону. Например:

$templateName = $request->hasHeader('X-Requested-With')
? 'template-without-layout'
: 'template-with-layout';

return new HtmlResponse($this->template->render($templateName));
0

Другие решения

В настоящее время я использую простой макет:

<?php

echo $this->content;

Есть PR отключить рендеринг макета.

0

Теперь это доступно, просто установите layout = false

    return new HtmlResponse($this->template->render(
'web::index',
['layout' => false]
));
0
По вопросам рекламы [email protected]