为了账号安全,请及时绑定邮箱和手机立即绑定

User.php boot() 方法在用户注册时被多次调用

User.php boot() 方法在用户注册时被多次调用

PHP
偶然的你 2022-10-28 14:45:49
当使用内置的 Laravel 7 功能创建用户时,我boot()在我的 User 模型上调用该方法,以便为新用户分配 UUID。我遇到的问题是,由于某种原因,启动方法 get 总共调用了 4 次,导致在 S3 上创建了 4 个不同的目录。应用程序/用户.php/**    * Create the user when this class is called    *    * @return void    */protected static function boot(){    // Setup parent    parent::boot();    // Create UUID    $uuid = Str::uuid();    // Create user directory on S3    Storage::disk('s3')->makeDirectory('users/' . $uuid);    // Assign UUID to new user    self::creating(function ($model) use ($uuid) {        $model->id = $uuid;    });}这是在创建时向用户添加字段的正确方法吗?我尝试使用该RegisterController.php -> create()方法添加它,但它不会向用户添加任何内容,并导致错误提示 ID 需要默认值。
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

每当要创建对象时都会调用 boot 方法(不仅仅是持久化,这creating将是做什么的)。每当 Laravel 使用 Auth 函数时,都会发生这种情况,例如,获取当前用户,因此需要多次调用来引导。


parent::boot()您应该将所有内容放在创建闭包内的引导中(除了调用):


protected static function boot()

{

    // Setup parent

    parent::boot();


    self::creating(function ($model) {


        // Create UUID

        $uuid = Str::uuid();


        // Create user directory on S3

        Storage::disk('s3')->makeDirectory('users/' . $uuid);


        $model->id = $uuid;

    });

}

不再需要use ($uuid)on 功能。


查看完整回答
反对 回复 2022-10-28
  • 1 回答
  • 0 关注
  • 67 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信