问题描述
我想自定义Laravel注册过程。 用户无法直接单击链接进行注册,而是将链接发送给用户进行注册。例如:http://127.0.0.1:8000/register?id=123 如果客户表中有该ID,则获取ID对应的电子邮件地址,然后使用该电子邮件地址重定向到“注册”屏幕。
如何更改web.php文件以接受参数? Auth :: routes();
如何更改与Register相关的控制器以接受参数并将值传递给视图?
解决方法
您的问题尚不清楚,但我会尝试。
首先,您必须像这样Auth::routes(['register' => false]);
那样关闭auth的注册,这样,即使在url中键入内容,用户也无法访问注册路由。
完成此操作后,转到Auth \ RegisterController类,并窥视其使用的RedirectsUsers
特性,您将找到类似于以下内容的register方法:
/**
* Handle a registration request for the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
$this->guard()->login($user);
if ($response = $this->registered($request,$user)) {
return $response;
}
return $request->wantsJson()
? new Response('',201)
: redirect($this->redirectPath());
}
这是发生注册逻辑的地方,您可以根据自己的喜好自定义它,但请注意不要摔死自己。
对于路由,您可以做一两件事
例如1
Route::get('/custom/registration','RegisterController@register')->name('register');
然后您可以像这样在控制器中访问id
:
public function register(Request $request)
{
$id = $request->query('id)
// Run your logic...
}
或
例如2
Route::get('/custom/registration/{id}','RegisterController@register')->name('register');
然后您可以像这样在控制器中访问id
:
public function register(Request $request,$id)
{
// Run your logic...
}
对您有意义的任何方式都可以。