1

1 つのアクション (またはアクションのセット) でレンダリングなしのレイアウトを設定することは可能ですか?

私が知っているように、構成でデフォルトのレイアウトを設定できます。これは、すべてのページでレンダリングされます。「レイアウト」変数に値を渡してアクションベイで変更できますが、レイアウトをまったくレンダリングしないことは可能ですか?

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
        ));
    }
}
4

3 に答える 3

0

Zend Expressive のアクションとテンプレートは 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));
于 2016-09-30T17:43:48.007 に答える