首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel新中间件无法工作。

Laravel新中间件无法工作。
EN

Stack Overflow用户
提问于 2017-10-16 10:19:25
回答 2查看 544关注 0票数 1

我正在创建简单的转诊系统。我已经完成了工作,但是推荐系统似乎不能正常工作,很可能是因为中间件。我会更清楚地解释这个问题。

所以,这是我的注册控制器

代码语言:javascript
复制
protected function create(array $data)
{
    $referred_by = Cookie::get('referral');

    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
        'affiliate_id' => str_random(10),
        'referred_by'   => $referred_by
    ]);
}

和中间件

代码语言:javascript
复制
<?php
namespace App\Http\Middleware;

use Illuminate\Http\Response;

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('referral', $request->query('ref'), 30));
        }
    }
    return $next($request);
    }
}

我还将中间件添加到内核中。

代码语言:javascript
复制
protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \App\Http\Middleware\CheckReferral::class, 
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];

所以,所有的用户都会得到afflitiate_id,但是数据库中没有一个用户是reference_by

编辑:整个REG控制器

代码语言:javascript
复制
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Requests; 
use Illuminate\Http\Request;
use DB;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Cookie;

class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/

use RegistersUsers;

/**
 * Where to redirect users after registration.
 *
 * @var string
 */
protected $redirectTo = '/dashboard';

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('guest');
}

/**
 * Get a validator for an incoming registration request.
 *
 * @param  array  $data
 * @return \Illuminate\Contracts\Validation\Validator
 */
protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
    ]);
}

/**
 * Create a new user instance after a valid registration.
 *
 * @param  array  $data
 * @return \App\User
 */
protected function create(array $data, Request $request)
{
    $referred_by = $request->cookie('referral');

    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
        'affiliate_id' => str_random(10),
        'referred_by' => $referred_by
    ]);
}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-19 13:53:59

解决办法其实很简单。\App\Http\中间件\CheckReferral::class,应该是$middlewareGroups网络而不是$middleware。以便应用程序能够捕获引用链接并将它们存储在cookie中。

票数 0
EN

Stack Overflow用户

发布于 2017-10-16 10:25:22

我看到您的中间件不是一个问题。您需要改变在控制器中获取cookie的方式:

代码语言:javascript
复制
protected function create(array $data, Request $request)  // Adding request as an argument.
{
    $referred_by = $request->cookie('referral');  // Notice the change here

    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
        'affiliate_id' => str_random(10),
        'referred_by'   => $referred_by
    ]);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46767956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档