如何在Laravel 5.8中实现自定义用户注册表单
如何在Laravel 5.8中实现自定义用户注册表单
我想在我的Laravel应用程序中使用提供的内置功能注册新用户,但还想添加两个额外的字段:名字和姓氏。我在应用程序的管理员区域进行注册,因此我有一个自定义表单,将数据发送到注册路由。当用户表为空时,我可以向数据库添加新用户。当我使用dd命令时,我也可以看到客户端发送的数据。但是当我尝试向数据库添加第二个用户时,什么都没有发生。没有显示任何错误。这次我尝试使用dd命令,但应用程序没有返回任何内容。
强调一下,我不想创建另一个控制器来处理这个问题,而是要扩展已经提供的RegisterController。
我需要帮助找出我做错了什么。
// 在User模型中
protected $fillable = [ 'firstname', 'lastname', 'email', 'password', ];
// 从客户端获取数据在RegisterController.php中
protected function validator(array $data) { return Validator::make($data, [ 'firstname' => ['required', 'string', 'max:255'], 'lastname' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'string', 'min:8', 'confirmed'], ]); }
// 在RegisterController.php中保存新用户
protected function create(array $data) { dd($data); return User::create([ 'firstname' => $data['firstname'], 'lastname' => $data['lastname'], 'email' => $data['email'], 'password' => Hash::make($data['password']), ]); }
// 我的表单
问题的出现原因:
在Laravel 5.8中,尝试使用上述方式创建一个自定义的用户注册表单,但是无法成功保存用户数据。
解决方法:
为了解决这个问题,我们需要实现一个自定义的用户注册表单。以下是解决方法的步骤:
1. 首先,打开终端并进入到Laravel项目的根目录。
2. 使用以下命令创建一个新的用户注册表单:
php artisan make:controller Auth/RegisterController
3. 打开刚刚创建的控制器文件(位于app/Http/Controllers/Auth/RegisterController.php)。
4. 在控制器文件中,找到register方法。该方法负责处理用户注册的逻辑。
5. 在register方法中,将以下代码添加到$user变量的顶部:
use App\User;
6. 然后,将以下代码添加到register方法的末尾,用于保存用户数据:
$user = User::create([ 'firstname' => $data['firstname'], // 添加其他表单字段 ]);
7. 保存并关闭文件。
8. 接下来,打开终端并运行以下命令来生成用户注册的视图:
php artisan make:auth
9. 运行以下命令以更新Composer自动加载的类映射:
composer dump-autoload
10. 最后,将以下代码添加到注册视图(位于resources/views/auth/register.blade.php)的合适位置,以显示自定义的字段:
<div class="form-group"> <label for="firstname" class="col-md-4 control-label">First Name</label> <div class="col-md-6"> <input id="firstname" type="text" class="form-control" name="firstname" value="{{ old('firstname') }}" required autofocus> @if ($errors->has('firstname')) <span class="help-block"> <strong>{{ $errors->first('firstname') }}</strong> </span> @endif </div> </div>
完成以上步骤后,我们就成功实现了一个自定义的用户注册表单,并且能够保存用户数据了。
Laravel 5.8中实现自定义用户注册表单的方法
在Laravel 5.8中,如果要将管理员和其他用户分为两个不同的组,就不能使用`Auth::routes();`两次,因此最好手动编写所有默认路由,以便更清楚地了解情况。以下是一个示例:
Route::group([ 'as' => 'admin.', 'prefix' => 'admin', ],function(){ Route::get('register', 'Auth\RegisterController')->name('register'); Route::post('register', 'Auth\RegisterController'); }); Route::group([ 'as' => 'user.', ],function(){ Route::get('register', 'Auth\RegisterController')->name('register'); Route::post('register', 'Auth\RegisterController'); });
在上述示例中,我们手动编写了管理员和用户的注册路由。您可以在这里找到其他所有默认路由的列表。
要查看可以重写的所有方法,请转到以下路径:
`\vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php`
要更新重定向路径,请转到以下路径:
`\vendor\laravel\framework\src\Illuminate\Foundation\Auth\RedirectsUsers.php`