2016-05-13 55 views
0

我正在使用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

我很困擾這個,所以請提供任何建議,你可以。

由於提前,

安迪

+0

這是否有幫助? https://spark.laravel.com/docs/1.0/customization是否有可能爲您自己的實現期望的行爲交換適當的類? – haakym

+0

感謝您查看@haakym我原本在那裏看過,但並沒有完全理解我是否希望通過它來處理,它看起來像'Laravel \ Spark \ Repositories'中的UserRepository,它是存儲用戶插入邏輯的地方。我剛剛添加了我已經存在的額外領域的邏輯,似乎工作得很好:) –

+1

太棒了!真高興你做到了。 – haakym

回答

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(); 

就像一個魅力;)

0

在Spark中這樣做的推薦方式是覆蓋SparkServiceProvider中的用戶創建方法。 Spark有一些特殊的內置方法來允許這樣做。

在app /供應商/ SparkServiceProvider.php您可以添加這樣的事情在啓動()方法:

 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; 
     }); 
+0

這是否會受到核心文件更新的影響?我現在還沒有接觸Spark一年,所以不記得它是如何成立的。 –

+1

不,所有更改都轉到app/Providers/SparkServiceProvider.php,您可以編輯它。更新不會受到這個影響......通過代碼挖掘,您可以在不需要編輯核心文件的情況下重寫幾乎所有的Spark代碼。 – ivanhoe