2017-10-16 7 views
1

Ich erstelle einfache Verweis-System. Ich habe die Arbeit beendet, aber das Überweisungssystem scheint nicht richtig zu funktionieren, wahrscheinlich wegen Middleware. Ich werde das Problem klarer erklären.Laravel neue Middleware funktioniert nicht

So, hier ist mein Registerregler

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

und die Middleware

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

ich auch Middleware hinzugefügt

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, 
]; 

So zum Kernel, erhalten alle Benutzer die afflitiate_id, aber keine von ihnen die reference_by in der Datenbank

EDIT: Der Regler GANZE REG

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

Antwort

0

Die Lösung war eigentlich sehr einfach. \ App \ Http \ Middleware \ CheckReferral :: class, sollte für die $ middlewareGroups Web nicht $ Middleware gewesen sein. Damit die Anwendung Referral Links erfassen und in einem Cookie speichern kann.

0

Ich sehe, dass Ihre Middleware ist kein Problem. Sie müssen die Art ändern, wie Sie den Cookie in Ihrem Controller bekommen:

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

Typ Fehler: Argument 2 an App \ Http \ Controllers \ Auth \ RegisterController :: create() übergeben muss eine Instanz von Illuminate \ Http \ Request sein, keine gegeben, in/Applications/MAMP/htdocs/invest/vendor aufgerufen /laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php on line 33 – Emin

+0

Fügen Sie diese Zeile vor der Klassendeklaration hinzu: 'Illuminate \ Http \ Request;' –

+0

Vielen Dank für Ihre Antwort. Es ist tatsächlich hier hinzugefügt ist der volle Register-Controller – Emin

Verwandte Themen