Как вставить больше данных при регистрации пользователя в Laravel Spark

Я использую Laravel Spark для своего последнего приложения, и мне нужно вставить случайный код в столбец таблицы при регистрации.

После МНОГО копания в коде я нашел этот блок кода:

/**
 * Handle a registration request for the application.
 *
 * @param  RegisterRequest  $request
 * @return Response
 */
public function register(RegisterRequest $request)
{
    Auth::login($user = Spark::interact(
        Register::class, [$request]
    ));

    event(new UserRegistered($user));

    return response()->json([
        'redirect' => $this->redirectPath()
    ]);
}

Который находится в Laravel\Spark\Http\Controllers\Auth\RegisterController;

Я предполагаю, что именно там происходит код для вставки пользователя в базу данных. Но я не могу понять, как заполнить столбец с именем confirmation_code чем-то вроде 13sfet1201.

Я так застрял на этом, поэтому, пожалуйста, дайте совет, который вы можете.

Заранее спасибо,

Энди


person Andy Holmes    schedule 13.05.2016    source источник
comment
Это помогает? spark.laravel.com/docs/1.0/customization Можно ли заменить подходящие классы для ваших собственных, которые реализуют желаемое поведение?   -  person haakym    schedule 13.05.2016
comment
Спасибо, что посмотрели @haakym. Я изначально смотрел туда, но не совсем понял, будет ли то, что я хотел, обрабатываться через это, похоже, UserRepository в Laravel\Spark\Repositories, где хранится логика для вставки пользователей. Я только что добавил свою логику для дополнительных полей внутри уже существующего и, кажется, работает хорошо :)   -  person Andy Holmes    schedule 13.05.2016
comment
Большой! Рад, что у тебя получилось.   -  person haakym    schedule 13.05.2016


Ответы (2)


Итак, чтобы обойти это, вы можете сделать следующее:

По адресу Laravel\Spark\Repositories находится файл с именем UserRepository.php. Здесь обрабатывается логика создания новых пользователей.

В этом файле вы увидите следующий блок:

$user->forceFill([
    'name' => $data['name'],
    'email' => $data['email'],
    'password' => bcrypt($data['password']),
    'last_read_announcements_at' => Carbon::now(),
    'trial_ends_at' => Carbon::now()->addDays(Spark::trialDays()),
])->save();

Я изменил его в соответствии с тем, что мне было нужно, например:

$user->forceFill([
    'name' => $data['name'],
    'email' => $data['email'],
    'username' => $data['username'],
    'confirmation_code' => $data['confirmation_code'],
    'password' => bcrypt($data['password']),
    'last_read_announcements_at' => Carbon::now(),
    'trial_ends_at' => Carbon::now()->addDays(Spark::trialDays()),
])->save();

Работает как шарм ;)

person Andy Holmes    schedule 14.05.2016

Рекомендуемый способ сделать это в Spark — переопределить метод создания пользователя в SparkServiceProvider. Для этого в Spark есть специальные встроенные методы.

В app/Providers/SparkServiceProvider.php вы можете добавить что-то вроде этого в метод booted():

        Spark::createUsersWith(function ($request) {
            $user = Spark::user();

            // trim these form fields
            $fields = ['name', 'email', 'password', 'timezone', 'referral_code'];
            $data = array_map('trim', $request->only($fields)); 

            // now add user
            $user->forceFill([
                'name' => $data['name'],
                'email' => $data['email'],
                'password' => bcrypt($data['password']),
                'tzone' => $data['timezone'],
                'referred_by' => $data['referral_code'],
                'last_read_announcements_at' => Carbon::now(),
                'trial_ends_at' => Carbon::now()->addDays(Spark::trialDays()),
            ])->save();

            // here you can queue notification email to user and 
            // all that post-registration stuff, or you could fire an event
            // and add listener to handle this

            return $user;
        });

Возможно, вы также захотите добавить пользовательскую проверку пользовательских данных. Просто добавьте свои правила в метод booted(), как в предыдущем фрагменте:

        Spark::validateUsersWith(function ($request) {
            $rules = [
                'name' => 'required|max:255',
                'email' => 'required|email|max:255|unique:users',
                'password' => 'required|min:6|confirmed', 
                'timezone' => 'required|timezone',
                'terms' => 'required|accepted',
                'referral_code' => 'alpha_num', 
            ];

            return $rules;
        });
person ivanhoe    schedule 18.07.2017
comment
Повлияют ли на это обновления основных файлов? Я не трогал Spark уже год, поэтому не могу вспомнить, как он настроен, ха-ха. - person Andy Holmes; 19.07.2017
comment
Нет, все изменения вносятся в файл app/Providers/SparkServiceProvider.php, который вы можете редактировать. Это никак не повлияет на обновления... немного покопавшись в коде, вы сможете переопределить почти все в Spark, даже не редактируя файлы ядра. - person ivanhoe; 24.07.2017
comment
Для меня это работало только при начальной регистрации, но когда я иду редактировать профиль, он не обновляется :( - person Andrew Fox; 19.02.2021