2017-07-16 9 views
0

Ich habe Probleme, Cookie zu bekommen, ich definiere einen Cookie in einer Middleware "CheckReferral", aber wenn ich den Cookie in einem Controller den Cookie null zurückrufe, überprüfe ich den Cookie im Browser, und der Cookie ist gut im Browser, ich weiß nicht, was das Problem mit dem Cookie ist ... Ich habe zu viel gegooglet und das ist meine letzte Ressource, Jemand kann mir helfen? HierCookie :: get() return null

ist der Code, der Middleware:

<?php 

namespace App\Http\Middleware; 

use Closure; 

class CheckReferral 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if ($request->hasCookie('referral')) { 
      return $next($request); 
     } else { 
      if ($request->query('ref')) { 
       return redirect($request->fullUrl())->withCookie(cookie()->forever('referral', $request->query('ref'))); 
      } 
     } 

     return $next($request); 
    } 

Dies ist, wie ich das Cookie in der Steuerung aufrufen:

protected function create(array $data) 
{ 
    // $referred_by = User::where('affiliate_id', Cookie::get('referral'))->first(); 
    // $referred_user = Cookie::get('referral'); 

    return User::create([ 
     'name'   => $data['name'], 
     'email'  => $data['email'], 
     'password'  => bcrypt($data['password']), 
     'affiliate_id' => $this->uniqueRandomString(), 
     'referred_by' => Cookie::get('referral'), 
    ]); 
} 

Hier wird das Cookie im Browser gespeichert ist:

Why I can't use this stored?

Hier ist die Datenbank ... das Feld referred_by, ist s Tored als null, aber sollte der Wert des Cookies speichern:

Why the cookie return null?

viel Dank, ich hoffe, das Problem zu lösen, und kennen die Ursache ...

Antwort

0

ich es Vanille PHP gelöst haben, die globale Variable $_COOKIE

protected function create(array $data) 
{ 
    // $referred_by = User::where('affiliate_id', Cookie::get('referral'))->first(); 
    // $referred_user = Cookie::get('referral'); 

    return User::create([ 
     'name'   => $data['name'], 
     'email'  => $data['email'], 
     'password'  => bcrypt($data['password']), 
     'affiliate_id' => $this->uniqueRandomString(), 
     'referred_by' => $_COOKIE['referral'], 
    ]); 
} 

Wo Cookie::get('referral')$_COOKIE['referral'] keine elegante Lösung ist, aber die Arbeit ...

1

Vergewissern Sie sich, dass definiert haben Middleware in app\Http\Kernel.php. Speziell im 'web' Array.

Importierte die Middleware in Ihrer web.php (Routen) Datei.

..und hinzugefügt schließlich, dass Middleware für Ihre Route wie folgt:

Route::web('/', ['middleware' => CheckReferral'] 

Wenn Sie bereits so stellen Sie sicher, getan haben Sie referred_by Spalte zum $fillable[] Array Ihrer User Modell hinzugefügt haben.

Bearbeiten. Dies tun:

\Request::cookie('referral'); 
+0

Ja, ich habe die Middleware im Kernel definiert, da das Cookie im Browser gespeichert ist ... und die Middleware global ausgeführt wird, muss nicht in der Route definiert sein ... Und ich habe das '$ fillable 'eingegeben [] 'Das Problem ist Cookie :: get() return n null und ich habe es mit der Feld-E-Mail getestet, das ist nicht nulable, und ich bekomme den Fehler ... Also, das Problem ist der Cookie :: get() ... –

+0

Bitte versuchen Sie es, wenn es tatsächlich als der Wert in Ihrer Middleware. '' Anfrage-> Abfrage ('ref') '' – verax

+0

ja diese Abfrage ist der Wert in meiner Middleware ... –