2017-07-16 135 views
0

我在获取Cookie时遇到问题,我在一个中间件“CheckReferral”中定义了一个cookie,但是当我在一个Controller中调用cookie时,cookie返回null,我在浏览器中检查cookie,并且该cookie在浏览器中很好,我不知道cookie有什么问题...我已经搜索了太多,这是我的最后一个资源,有人可以帮助我吗?Cookie :: get()返回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); 
    } 

这是我如何调用该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::get('referral'), 
    ]); 
} 

这里是存储在浏览器中的cookie:

Why I can't use this stored?

这里是数据库...字段refer_by,是s tored为空,但应存储的cookie的值:

Why the cookie return null?

感谢了很多,我希望解决的问题,并知道原因......

回答

0

我用香草PHP,全局变量$_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'], 
    ]); 
} 

哪里Cookie::get('referral')$_COOKIE['referral']是不是一个完美的解决方案,但工作解决它......

1

确保您已经定义中间件app\Http\Kernel.php。具体在'web'阵列。

web.php(路由)文件中导入中间件。

..和最后补充说,中间件路线,像这样:

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

如果你已经这样做了,那么要确保你已经添加referred_by列到$fillable[]阵列您User模型。

编辑。 这将做到:

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

是的,我已经在内核中定义了中间件,因为cookie存储在浏览器中......并且中间件全局运行,不需要在路由中定义......并且我已经将'$ fillable []'问题是Cookie :: get()返回N空,我已经测试它与现场电子邮件,这是不可能的,我得到的错误...所以,问题是Cookie :: get()... –

+0

请尝试倾倒这个,如果它实际上在你的中间件中的价值。 ''request-> query('ref')'' – verax

+0

是这个查询是我的中间件的值... –