2016-09-30 10 views
0

Возможно ли установить макет без рендера в одном действии (или множестве действий)?Макет без рендеринга на некоторые действия в Zend Expressive?

Как я знаю, я могу установить макет по умолчанию в config, , который будет отображаться на каждой странице. Я могу изменить его в 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

Если вы пытаетесь вернуть данные JSon есть также 'Zend \ Diactoros \ Response \ JsonResponse'. Вы используете его следующим образом: 'return new JsonResponse ($ dataArray);' – xtreamwayz

+0

Спасибо! Но мне нужно вернуть HTML. В первом запросе (без ajax) необходимо вернуть Layout + View, и если это ajax-запрос для возврата только View, потому что я не хочу снова загружать макет. – tasmaniski

ответ

0

Теперь она доступна, просто установить макет = ложь

return new HtmlResponse($this->template->render(
     'web::index', 
     ['layout' => false] 
    )); 
0

Действие и шаблоны Zend выразительны один к одному, так что я думаю, что решение, следует ли раскладка быть оказана или не должно быть сделано в самом соответствующем шаблоне. В принципе, это вопрос опускания <?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 отключить рендеринг макета.