it-swarm.dev

أين يمكنني تعيين الرؤوس في laravel

أريد تعيين الرؤوس كـ array('Cache-Control'=>'no-cache, no-store, max-age=0, must-revalidate','Pragma'=>'no-cache','Expires'=>'Fri, 01 Jan 1990 00:00:00 GMT'); لجميع طرق العرض الخاصة بي ، وأنا أفعل ذلك حاليًا في جميع وحدات التحكم أثناء عرض طرق العرض ، مثل

$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);`

لذلك بدلاً من كتابة هذا لكل مسار ، يمكن القيام به في نطاق عالمي ، بحيث يتم تعيين الرؤوس لكل طريقة عرض.

حاولت تعيين الرؤوس عن طريق إنشاء بعد التصفية ، ولكن لم يعمل ذلك.

هل يمكن لأحد أن يقول لي أين يمكنني تعيين الرؤوس لجميع وجهات نظري؟

تحديث واحد من محتوى التعريف ملف التعريف الخاص بي

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>

الآن عندما أستخدم Redirect::to('/',301,$headers) الرأس في firebug هو

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

وعندما أستخدم Redirect::to('/');

الرأس في firebug هو

Cache-Control   no-cache
Connection  Keep-Alive
Content-Type    text/html; charset=UTF-8
Date    Tue, 09 Jul 2013 14:52:08 GMT
49
Trying Tobemyself

هناك طريقتان مختلفتان يمكنك القيام بهما - جميعهما لهما مزايا وعيوب.

الخيار 1 (بسيط): بما أن المصفوفة عبارة عن بيانات ثابتة فقط - ضع الرؤوس يدويًا في تخطيطات العرض الخاصة بك مباشرةً - أي لا تمر بها من أي مكان - رمز ذلك مباشرة في وجهة نظرك.

<?php
  //set headers to NOT cache a page
  header("Cache-Control: no-cache, must-revalidate"); //HTTP 1.1
  header("Pragma: no-cache"); //HTTP 1.0
  header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>

الخيار 2: استخدم عرض الملحنين . يمكنك استخدام تطبيق قبل التصفية لربط الرأس بجميع طرق العرض في تطبيقك.

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

ثم فقط صدى رؤوس $ في طريقة العرض الخاصة بك.

ملاحظة: يجب أن تسمح للعرض بتعيين الرؤوس الخاصة بك - وهذا هو سبب قيامنا "بتمرير" الرأس في العرض لـ Laravel للتعامل معه. إذا حاولت إخراج الرأس نفسه من داخل مرشح أو شيء ما ، سوف تسبب مشاكل.

تحرير الخيار 3: لقد اكتشفت هذا للتو - يمكنك تجربة ذلك

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');
}); 
33
Laurence

في Laravel 5 ، باستخدام Middleware ، إنشاء ملف جديد ، وتعديل ملف موجود:

ملف جديد: التطبيق/المتشعب/الوسيطة/AddHeaders.php

<?php namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Routing\Middleware;

// If Laravel >= 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;
    }
}

تعديل الملف الموجود التطبيق/Kernel.php

protected $middleware = [
.
.
.

        'App\Http\Middleware\AddHeaders',
    ];

وانت مجموعة.

33
Amarnasan

في Laravel 4 ، هذا يعمل لي:

في filters.php:

App::after(function($request, $response)
{
   $response->headers->set('key','value');
});

مثل:

App::after(function($request, $response)
{
   $response->headers->set('P3P','CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM"');
});
29
Ben Bos

في Laravel 5 يمكنك تغيير /public/index.php السطر 55 وتعيين رأسك للتطبيق بأكمله:

$response->send();

مع:

$response->header('Content-Type','text/html; charset=ISO-8859-1')->send();

ل essample.

8
Marius Catalin

العمل على Laravel 4.2. أنا أستخدم المرشح لهذا ، لذلك في filters.php لدي:

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

});

من أرفق هذا المرشح إلى طرق أو وحدات التحكم. تحكم المرفقة يشبه هذا بالنسبة لي:

public function __construct() {

        $this->beforeFilter('onestep',array('except' => 'getLogin'));
        $this->beforeFilter('csrf',array('on' => 'post'));
        $this->afterFilter("no-cache", ["only"=>"getIndex"]);
    }

هذا المرشح مرفق بعد تصفية.

5
MikeWu

من أجل Laravel> = 5.2 حتى الآن ، وبعد إجابةAmarnasan ، على الرغم من أنني استخدمت الألغام لمكالمات API

في Laravel 5 ، باستخدام Middleware ، إنشاء ملف جديد ، وتعديل ملف موجود:

ملف جديد: التطبيق/المتشعب/الوسيطة/AddHeaders.php

<?php 
namespace App\Http\Middleware;
use Closure;
use Illuminate\Routing\Redirector;
use Illuminate\Http\Request;
use Illuminate\Foundation\Applicaion;


class AddHeaders 
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);
        $response->header('Cache-Control', 'max-age=36000, public');
        //$response->header('another header', 'another value');

        return $response;
    }
}

قم بتعديل تطبيق الملف/Kernel.php الحالي بحيث يمكنك استخدامه مع كل مسار محدد

protected $routeMiddleware = [
.
.
.

        'myHeader' => \App\Http\Middleware\AddHeaders::class,
    ];

And you're set.

ثم يمكنك استخدامه كما هو الحال بالنسبة للطرق أو المجموعات الفردية

$api->get('cars/all', '[email protected]')->middleware(['myHeader']);;
4
BlackPearl

للقراء المستقبليين الذين يستخدمون Laravel 5.x ، يمكن معالجة ذلك خارج الصندوق دون الحاجة إلى إنشاء أي برامج وسيطة مخصصة .

لدى Laravel طريقة المساعد response() ، والتي يمكنك ترتيب سلاسل الرؤوس إليها بسهولة شديدة.

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'
    ]);

اقرأ المزيد عنها في documentation ، لأنه يمكن التعامل مع إرفاق عدد من الأشياء ؛ cookies ، views ، وأكثر من ذلك.

1
camelCase