使用 layouts/views 时在 Laravel 4.2 中设置响应 headers

Setting response headers in Laravel 4.2 while using layouts/views

我按照文档中所述在我的控制器中以下列方式使用布局(请注意,没有 returned):

public function someControllerFunction () {

    $this->layout = View::make('layout');
    $this->layout->content = View::make('page', $params);

}

在我的布局中,我设置了一些 cache-control headers,如下所示:

<?php
    header('Cache-Control: public');
    header('Cache-Control: max-age=600');
    Log::info("headers set in layout");
?>

一切都很好,这些 headers 出现在应用程序所有页面的响应中。但是现在我有一个页面,我想通过以下方式显式禁用缓存:

<?php
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    Log::info("headers set in View");
?>

我试着把它放在我的视图中,但没有雪茄。查看日志,视图中的 php 在布局中 之前 执行,导致定义的布局 headers 覆盖定义的视图 headers .

所以我决定寻找 "Laravel" 的方法,发现文档建议您 return 像这样的回复:

return Response::view('page')->header('Cache-Control', '...');

但是我如何做出使用布局的响应?我在文档中找不到任何提及。

想通了。您可以制作布局并将其传递到 Response(将 headers 附加到响应)和 return 如下所示:

$this->layout = View::make('layout');
$this->layout->content = View::make('page', $params);

$response = Response::make($this->layout);
$response->header(...);

return $response;