在 Zend Expressive 中对某些操作进行布局不渲染?
Layout no render on some actions in 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
));
}
}
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));
目前我使用普通布局:
<?php
echo $this->content;
有PR禁用布局渲染。
现在可用,只需设置 layout = false
return new HtmlResponse($this->template->render(
'web::index',
['layout' => false]
));
是否可以在一个动作(或一组动作)中设置布局不渲染?
据我所知,我可以在配置中设置默认布局, 它将呈现在每个页面上。 我可以在 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
));
}
}
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));
目前我使用普通布局:
<?php
echo $this->content;
有PR禁用布局渲染。
现在可用,只需设置 layout = false
return new HtmlResponse($this->template->render(
'web::index',
['layout' => false]
));