2017-07-16 6 views
0

ミドルウェア「CheckReferral」でCookieを取得する際に問題がありますが、1つのコントローラでCookieを呼び出したときにnullが返され、ブラウザのCookieがチェックされ、クッキーはブラウザでいいです、私はクッキーの問題は何か分かりません...私はあまりにも多くのGoogle検索したこれは私の最後のリソースです、誰かが私を助けることができますか?ここでCookie :: get()return null

は、ミドルウェアのコードです:

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

これは私がコントローラにクッキーを呼び出す方法です。ここで

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

はブラウザに保存されたクッキーです:

Why I can't use this stored?

ここにデータベースがあります...フィールドrefer_byはsですヌルとしてtoredが、Cookieの値を保存する必要があります。

Why the cookie return null?

がたくさんありがとう、私は

答えて

0

...

1

はあなたがいることを定義していることを確認してください...問題の解決を願って、原因を知っていますミドルウェアはapp\Http\Kernel.phpです。具体的には'web'配列にあります。

web.php(ルート)ファイルにミドルウェアをインポートしました。

..andは最終的にそのようなあなたのルートのそのミドルウェアを追加しました:あなたはすでにやった場合

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

ので、あなたはあなたのUserモデルの$fillable[]配列にreferred_by列を追加したことを確認してください。

編集。 これが行います:私はバニラPHP、Cookie::get('referral')$_COOKIE['referral']ある$_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'], 
    ]); 
} 

はエレガントなソリューションではありませんグローバル変数が、仕事を使用して、それを解決してきました

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

はい、カーネルにミドルウェアを定義しました。その結果、クッキーはブラウザに保存されます。ミドルウェアはグローバルに実行され、ルートに定義する必要はありません。そして、私は '$ fillable [] '問題はCookie :: get()returです。 n nullと私はフィールドの電子メールでテストしました。それはnulableではありません。エラーが発生しました...だから、問題はCookie :: get()... –

+0

実際にはダンプしてみてくださいあなたのミドルウェアの価値。 "$ request-> query( 'ref')' ' – verax

+0

はいこのクエリは私のミドルウェアの値です... –