0

我正在为我的最新应用程序使用 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.

我非常坚持这一点,所以请提供任何建议。

提前致谢,

安迪

4

2 回答 2

1

好的,因此,要解决此问题,您可以执行以下操作:

有一个文件位于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();

奇迹般有效 ;)

于 2016-05-14T19:37:48.290 回答
1

在 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;
        });
于 2017-07-18T19:40:34.253 回答