在laravel中使用Cookie来获取引荐代码ID?

时间:2017-10-30 16:12:43

标签: laravel cookies referrals

我已经为我的平台上的每个用户生成了推荐代码,并且会使用Cookie来跟踪新用户是否通过其他人注册(也就是说他们被推荐)。

我可以生成一个网址,即http://localhost:8888/Test/public/?ref=111222333444

但是,当我使用代码注册为新用户时,cookie似乎没有存储并转换回我的数据库

我错过了什么?

<?php
namespace App\Http\Middleware;
use Illuminate\Http\Response;
use Closure;

class CheckReferral
{

public function handle($request, Closure $next)
{
    if( $request->hasCookie('referral')) {
        return $next($request);
    }
    else {
        if( $request->query('ref') ) {
          print "yes cookie detected";
            return redirect($request->fullUrl())->withCookie(cookie()->forever('referral', $request->query('ref')));
        }
    }
    return $next($request);
}
}

2 个答案:

答案 0 :(得分:0)

好的,这是我的愚蠢错误 - 我忽略了将中间件添加到我的路线中。通过这样解决它:

use App\Http\Middleware\CheckReferral;


Route::get('/', function () {
return view('welcome');
})->middleware(CheckReferral::class);

答案 1 :(得分:0)

使用中间件的最佳方法是将其设置为Kernal类,方法是将其设置为routeMiddleware数组,例如

$routeMiddleware = [
    'auth' => \Laravel\Http\Middleware\Authenticate::class,
    'guest' => \Laravel\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,

    ...

    'check-referral' => \Laravel\Http\Middleware\CheckReferral::class,
];

然后指定路线,例如

Route::get('/', function () {
//
})->middleware('check-referral');

希望这会有所帮助