如何在Laravel 5中重写注册功能
如何在Laravel 5中重写注册功能
我正在尝试通过遵循这个问题中的建议来重写Laravel 5中的Registration功能。然而,在我的情况下,我并不是想要从注册页面重定向用户。相反,我只想注册新用户,但保持当前(管理员)用户登录。默认函数会验证并登录新用户,然后重定向到\"home\"页面。所以,这是我尝试在AuthController.php中添加的代码:\n// 覆盖AuthenticatesAndRegistersUsers中的函数(位于/Illuminate/Foundation/Auth下)\npublic function postRegister(Request $request) {\n $validator = $this->registrar->validator($request->all());\n if ($validator->fails())\n {\n $this->throwValidationException(\n $request, $validator\n );\n }\n //$this->auth->login($this->registrar->create($request->all()));\n $this->registrar->create($request->all());\n return redirect(\'admin\');\n}\n我以为我很聪明,只是创建了一个新账户,然后将当前用户重定向到管理员页面。然而,没有创建用户并且重定向也没有发生。如果有任何想法,将不胜感激!
在Laravel 5中,有一个问题需要解决:如何重写注册功能(How to override Registration function in Laravel 5)。
首先,我们需要查看artisan rout:list命令,找到postRegister函数被调用的位置。接下来,我们需要重写register函数来解决这个问题。下面是具体的解决方法:
1. 打开app/Http/Controllers/Auth/RegisterController.php文件。
2. 在该文件中找到register函数,这是Laravel默认提供的注册逻辑。
3. 在自己的代码中,编写一个新的register函数,覆盖默认的注册逻辑。
4. 在新的register函数中,实现自定义的注册逻辑。
下面是一个示例代码,展示了如何重写register函数:
public function register(Request $request) { // 自定义的注册逻辑 // ... }
在新的register函数中,你可以根据自己的需求编写任何自定义的注册逻辑。这样,当用户进行注册操作时,会调用你所编写的register函数,而不是Laravel默认提供的函数。
通过重写register函数,你可以完全掌控注册逻辑,实现自定义的验证、存储等操作,以满足项目的需求。这是解决问题的一种有效方法。
Laravel 5中如何重写注册功能
在Laravel 5中,注册表单提交后默认会自动登录用户,但有时我们希望将用户重定向到一个“成功”页面,并让他们稍后手动登录。为了实现这一点,我们需要重写RegistersUsers trait中的register()方法。
RegistersUsers trait是Laravel框架的一部分,位于vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php中。这个trait负责处理所有注册的相关逻辑。
要禁用自动登录,我们需要删除这一行代码:
$this->guard()->login($user);
但是直接编辑Laravel核心文件或/vendor目录下的文件是不被允许的。我们可以通过在RegisterController中重写register()方法来实现相同的效果。
首先,在RegisterController中添加如下命名空间和use语句:
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use Illuminate\Auth\Events\Registered;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
然后,在RegisterController中添加如下代码重写register()方法:
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
最后,根据之前的提示,确保redirectTo参数或方法设置正确,这样注册后的用户将会跳转到正确的页面。