添加到 Laravel 的内置注册页面 Laravel 8

Add to Laravel's built in Registration page Laravel 8

当用户在我的网站上注册时,我想将记录添加到另一个 table(位置)。

我已经通过 Socialite 进行 google 注册:

    // if user already found
            if( $user ) {
                // update the avatar and provider that might have changed
                $user->update([
                    'avatar' => $providerUser->avatar,
                    'provider' => $driver,
                    'provider_id' => $providerUser->id,
                    'access_token' => $providerUser->token
                ]);
            } else {
                // create a new user
                $user = User::create([
                    'name' => $providerUser->getName(),
                    'email' => $providerUser->getEmail(),
                    'avatar' => $providerUser->getAvatar(),
                    'provider' => $driver,
                    'provider_id' => $providerUser->getId(),
                    'access_token' => $providerUser->token,
                    // user can use reset password to create a password
                    'password' => ''
                ]);
            }
### this is the bit I added ###
            DB::table('locations')->insert([
                'name'=>'Practice location',
                'created_at'=> date('Y-m-d H:j:s'),
                'updated_at'=> date('Y-m-d H:j:s'),
                'user'=> $user->id,
                'url'=> 'https://sites-jk.s3.eu-west-2.amazonaws.com/seeder/dartboard.png',
            ]);

最后一段代码在位置 table 中添加了一条与新用户相关的记录。我很高兴我做到了。这是在 app\Http\Controllers\Admin 中的 UserController 中,这是我按照教程创建的文件。

我想要实现的与上面相同,但当用户使用Laravel的内置注册系统时触发。我不知道在哪里可以找到这个文件,我想将上面的最后一段代码添加到其中,这样当他们注册到我的网站时,它会自动在与新用户。

希望这是有道理的。

我浏览了 and this post,但没有看到任何对我有用/我能理解的内容。

您有多种选择。您可以覆盖 Laravel 附带的 RegisteredUserController.php 文件并在其中添加您的代码,但在用户模型上定义一个观察者 (https://laravel.com/docs/8.x/eloquent#observers) 会更容易和更整洁。

这会监视用户发生的任何 'events' 事件(例如,当他们被创建、更新或删除时)。

所以使用 artisan :

php artisan make:observer UserObserver --model=User

将在 App\Observers 处创建(如果它尚不存在)一个文件夹,并在其中创建一个名为 UserObserver.php 的文件。该文件将包含样板方法(将是空的)用于所有你能做的事情'observe',所以你想找到一个看起来像这样的方法:

public function created(User $user)
{
    //
}

您会看到新创建的用户已被传递给该方法,因此您只需实施您已经拥有的代码来创建位置并根据新用户填充它。

最后,你需要告诉 Laravel Observer 存在 - 在 App\Providers\EventServiceProvider.php 中有一个 boot() 方法可能是空的 - 你需要告诉它观察 User 模型,当 User 发生某些事情时,查看新创建的 Observer 并查看它是否必须因此做任何事情。

public function boot()
{
    User::observe(UserObserver::class);
}