User. php метод boot (), вызываемый несколько раз при регистрации пользователя - PullRequest
0 голосов
/ 12 марта 2020

При создании пользователя с использованием встроенной функции Laravel 7 я вызываю метод boot() в моей модели User, чтобы назначить UUID новому пользователю. Проблема, с которой я сталкиваюсь, заключается в том, что метод загрузки get вызывается в общей сложности 4 раза по какой-то причине, вызывая создание на S3 4 разных каталогов.

App / User. 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(), но тогда он ничего не добавил бы к пользователю и не привел бы к ошибке, говорящей, что для идентификатора требуется значение по умолчанию.

1 Ответ

0 голосов
/ 12 марта 2020

Метод загрузки вызывается всякий раз, когда должен быть создан объект (не только постоянный, что и сделает 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) для функции.

...