2016-09-30 8 views
0

1つのアクション(または一連のアクション)でレイアウトをレンダリングしないように設定できますか?Zend Expressiveのいくつかのアクションでレイアウトがレンダリングされませんか?

私が知っているように、すべてのページでレンダリングされる という設定のデフォルトレイアウトを設定できます。 値が「layout」変数 を渡してAction Bayで変更することはできますが、レイアウトを全くレンダリングできないのですか? Zendの表現で

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の\ Diactoros \レスポンス\ JsonResponse'もあります。あなたは次のように使います: 'return new JsonResponse($ dataArray);' – xtreamwayz

+0

ありがとう!しかし、私はHTMLを返す必要があります。最初のリクエスト(ajaxなし)では、Layout + Viewを返す必要があり、レイアウトを再度ロードしたくないため、Viewだけを返すようリクエストした場合は必要です。 – tasmaniski

答えて

0

が今では、

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

アクションとテンプレートは、1対1ですので、私はレイアウトがレンダリングされるべきか否かの決定は適切なテンプレート自体になされるべきであると思います。基本的には、アクションテンプレートから<?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があります。あなたはJSONデータを返すようにしようとしている場合

関連する問題