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

当使用内置的 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 需要默认值。


偶然的你
浏览 68回答 1
1回答

慕容森

每当要创建对象时都会调用 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 功能。
打开App,查看更多内容
随时随地看视频慕课网APP