2017-06-29 1 views
0

Ich verwende Layouts in der folgenden Weise in meinem Controller wie in der Dokumentation beschrieben (Beachten Sie, dass nichts zurückgegeben wird):Einstellung Response-Header in Laravel 4.2 während Layouts/Ansichten mit

public function someControllerFunction() { 

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

} 

In meinem Layout Ich habe einige cache-control Header wie folgt:

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

das ist alles schön und gut und diese Header sind in der Antwort für alle Seiten in der App. Aber jetzt habe ich eine Seite, die ich möchte ausdrücklich Caching deaktivieren mit:

<?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"); 
?> 

Ich habe versucht, dies in meiner Ansicht platzieren, aber keine Zigarre. Mit Blick auf die Protokolle wird der php in der Ansicht ausgeführt vor, dass im Layout, die Layout definierten Header über die Sicht definierten Header.

So entschied ich mich für die „Laravel“ Art und Weise zu sehen, es zu tun und fand die docs vorschlagen, dass Sie eine Antwort wie so zurück:

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

Aber wie mache ich eine Antwort, die Layouts verwendet? Ich kann in den Dokumenten nichts davon finden.

Antwort

0

Ich habe es herausgefunden. Sie können ein Layout in Response erstellen und übergeben (indem Sie die Header an die Antwort anhängen) und es wie folgt zurückgeben:

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

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

return $response;