我在我的 laravel 项目 v5.4 上做了一个推荐系统,但我有两个问题:
- 我的用户推荐链接将加载我网站的索引页面,而不是加载注册页面。 (我该如何解决?)
- 当用户使用推荐链接注册时,邀请新用户的人以及新用户他/她自己的数据库中不会发生任何事情。 (如何在两个用户表中获取信息?)
我只是使用本教程来获取我的推荐系统: https://brudtkuhl.com/building-referral-system-laravel/
这是我的 CheckReferral
中间件:
<?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()->forever('referral', $request->query('ref')));
}
}
return $next($request);
}
}
这是我的UserController
public function referral() {
$user = User::find(1);
return view('users.referral', compact('user'));
}
这是我的路线:
Route::get('/referral', 'UserController@referral')->name('referral');
我的RegisterController
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Cookie;
use DB;
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 = '/home';
/**
* 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',
'username' => 'required|string|max:255|unique:users',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
'g-recaptcha-response' => 'required|captcha',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(array $data)
{
$referred_by = Cookie::get('referral');
return User::create([
'name' => $data['name'],
'username' => $data['username'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'affiliate_id' => str_random(10),
'referred_by' => $referred_by,
]);
}
用户
模型
protected $fillable = [
'name', 'username', 'email', 'password', 'affiliate_id', 'referred_by',
];
就是这样!
最佳答案
如果这是为了注册,正确的方法是首先在你的 route 你应该有一个可选的输入,比如..
Route::get('/register/{referral?},'Auth\RegisterController@registerPage');
然后在那个 Controller 中
public function registerPage($referral=0)
{
return view with the $referral variable ..
}
在您看来..您的表单应该是这样的..
<form action="/register/{{ referral }}" method="post" ..... >
回到你的路线..
Route::post('/register/{referral},'Auth\RegisterController@doRegister');
再次在你的 Controller 中..
public function doRegister(Request $request, $referral)
{
$request->merge(['referred_by' => $referral]);
}
因此您的 referred_by 是 0 或其他值..这取决于您如何处理验证..
关于php - 使用 Laravel 构建推荐系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45179123/