Je veux définir les en-têtes sous forme de array('Cache-Control'=>'no-cache, no-store, max-age=0, must-revalidate','Pragma'=>'no-cache','Expires'=>'Fri, 01 Jan 1990 00:00:00 GMT');
pour tous mes points de vue, je le fais actuellement dans tous les contrôleurs tout en retournant des vues, comme
$headers=array('Cache-Control'=>'no-cache, no-store, max-age=0, must-revalidate','Pragma'=>'no-cache','Expires'=>'Fri, 01 Jan 1990 00:00:00 GMT'); Redirect::to('/',301,$headers);`
Donc, au lieu d’écrire cela pour chaque route, cela peut être fait dans une scope globale, de sorte que les en-têtes soient définis pour chaque vue.
J’ai essayé de définir des en-têtes en créant après un filtre, mais je n’ai pas réussi à le faire fonctionner.
Quelqu’un peut-il me dire où puis-je définir les en-têtes pour toutes mes vues?
UPDATE Un de mes méta contenu de vue
Maintenant, quand j’utilise Redirect::to('/',301,$headers)
L’en-tête dans firebug est
Cache-Control max-age=0, must-revalidate, no-cache, no-store, private Connection Keep-Alive Content-Type text/html; charset=UTF-8 Date Tue, 09 Jul 2013 14:52:08 GMT Expires Fri, 01 Jan 1990 00:00:00 GMT
Et quand j’utilise Redirect::to('/');
L’en-tête de firebug est
Cache-Control no-cache Connection Keep-Alive Content-Type text/html; charset=UTF-8 Date Tue, 09 Jul 2013 14:52:08 GMT
Vous pouvez le faire de plusieurs manières différentes – toutes présentent des avantages et des inconvénients.
Option 1 (simple): le tableau n’étant que des données statiques – placez directement les en-têtes directement dans vos présentations – c.-à-d. Ne les passez pas de n’importe où – codez-les directement dans votre vue.
Option 2: Utiliser les compositeurs de vue . Vous pouvez utiliser une application avant le filtre pour lier l’en-tête à toutes les vues de votre application.
App::before(function($request) { $headers=array('Cache-Control'=>'no-cache, no-store, max-age=0, must-revalidate','Pragma'=>'no-cache','Expires'=>'Fri, 01 Jan 1990 00:00:00 GMT'); View::share('headers', $headers); });
Ensuite, répétez simplement les en-têtes $ dans vos vues.
Remarque: vous devez laisser la vue définir vos en-têtes – c’est pourquoi nous transmettons l’en-tête pour que Laravel puisse le gérer. Si vous essayez de sortir l’en-tête lui-même à partir d’un filtre ou de quelque chose, vous allez créer des problèmes.
Modifier l’option 3: je viens de découvrir cela – vous pourriez essayer ceci
App::before(function($request) { Response::header('Cache-Control', 'nocache, no-store, max-age=0, must-revalidate'); Response::header('Pragma', 'no-cache'); Response::header('Expires', 'Fri, 01 Jan 1990 00:00:00 GMT'); });
Dans Laravel 4, cela fonctionne pour moi:
Dans filters.php:
App::after(function($request, $response) { $response->headers->set('key','value'); });
Comme:
App::after(function($request, $response) { $response->headers->set('P3P','CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM"'); });
Dans Laravel 5, utiliser Middleware, créer un nouveau fichier, modifier un fichier existant:
Nouveau fichier: app / Http / Middleware / AddHeaders.php
= 5.2 then delete 'use' and 'implements' of deprecated Middleware interface. class AddHeaders implements Middleware { public function handle($request, Closure $next) { $response = $next($request); $response->header('header name', 'header value'); $response->header('another header', 'another value'); return $response; } }
Modifier le fichier existant app / Kernel.php
protected $middleware = [ . . . 'App\Http\Middleware\AddHeaders', ];
Et vous êtes prêt.
Travailler sur Laravel 4.2. J’utilise un filtre pour cela, donc dans filters.php j’ai:
Route::filter('no-cache',function($route, $request, $response){ $response->header("Cache-Control","no-cache,no-store, must-revalidate"); $response->header("Pragma", "no-cache"); //HTTP 1.0 $response->header("Expires"," Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past });
Je attache ce filtre aux routes ou aux contrôleurs. Contrôleur attaché ressemble à ceci pour moi:
public function __construct() { $this->beforeFilter('onestep',array('except' => 'getLogin')); $this->beforeFilter('csrf',array('on' => 'post')); $this->afterFilter("no-cache", ["only"=>"getIndex"]); }
Ce filtre est attaché comme afterFilter.
Dans Laravel 5, vous pouvez modifier /public/index.php ligne 55 et définir votre en-tête pour l’application entière:
$response->send();
avec:
$response->header('Content-Type','text/html; charset=ISO-8859-1')->send();
pour exemple.
Pour Laravel> = 5.2, après la réponse de @Amarnasan, bien que j’aie utilisé les miens pour les appels d’API
Dans Laravel 5, utiliser Middleware, créer un nouveau fichier, modifier un fichier existant:
Nouveau fichier: app / Http / Middleware / AddHeaders.php
header('Cache-Control', 'max-age=36000, public'); //$response->header('another header', 'another value'); return $response; } }
Modifiez le fichier existant app / Kernel.php pour pouvoir l’utiliser avec chaque itinéraire spécifique
protected $routeMiddleware = [ . . . 'myHeader' => \App\Http\Middleware\AddHeaders::class, ]; And you're set.
Ensuite, vous pouvez l’utiliser comme tel pour des itinéraires ou des groupes individuels
$api->get('cars/all', 'MyController@index')->middleware(['myHeader']);;
Pour les futurs lecteurs utilisant Laravel 5.x, cela peut être réalisé sans avoir à créer de middleware personnalisé .
Laravel a la méthode d’assistance response()
, à laquelle vous pouvez enchaîner les en-têtes très facilement.
use Response; // Or possibly: use Illuminate\Http\Response; depending on your aliases used. // Add a series of headers return response($content) ->header('Content-Type', 'text/xml') ->header('X-Header-One', 'Header Value'); // Or use withHeaders to pass array of headers to be added return response($content) ->withHeaders([ 'Content-Type' => 'text/xml', 'X-Header-One' => 'Header Value' ]);
En savoir plus à ce sujet dans la documentation , car il peut gérer plusieurs choses. cookies
, views
et plus.