2016-10-31 72 views
2

我目前正在努力在註冊表單上進行一些驗證。Laravel在註冊表格上自定義驗證

基本上,當用戶註冊時,它將檢查他們輸入的唯一代碼是否有效,如果不是,則不讓他們註冊。

但在我的代碼表中,這從我讀取也有一個到期日的代碼。

我認爲在有效期限沒有通過之後需要再次進行檢查,換句話說,它不會比現在更大。

我認爲你可以在驗證器中做到這一點,但我在語法上掙扎了一下,不確定它應該去哪裏。這裏是我的代碼:

protected function validator(array $data) 
{ 

    return Validator::make($data, [ 
     'code' => 'required|exists:codes', 
     'name' => 'required|max:255', 
     'email' => 'required|email|max:255|unique:users', 
     'date_of_birth' => 'required|date', 
     'password' => 'required|min:6|confirmed', 
     'accept_terms' => 'required|accepted', 
    ]); 
} 

/** 
* Create a new user instance after a valid registration. 
* 
* @param array $data 
* @return User 
*/ 
protected function create(array $data) 
{ 
    Code::where('code', $data['code'])->increment('uses'); 

    $data['code_id'] = Code::where('code', $data['code'])->value('id'); 

    return User::create([ 
     'name' => $data['name'], 
     'email' => $data['email'], 
     'date_of_birth' => $data['date_of_birth'], 
     'accept_terms' => $data['accept_terms'], 
     'code' => $data['code'], 
     'code_id' => $data['code_id'], 
     'password' => bcrypt($data['password']), 
    ]); 
} 

感謝提前:)

+0

您使用的是什麼版本的Laravel? –

+0

對不起,我應該明確說明,我正在使用Laravel 5.3 – user6073700

回答

3

只要(或更高版本),你可以使用Rule類來拯救你有定義一個自定義規則。

此:

'code' => [ 
    'required', 
    Rule::exists('codes')->where(function ($query) { 
     $query->where('expiry_date', '>=', Carbon::now()); 
    }), 
], 

(以上是假設expiry_date是在你的數據庫表中的列的實際名稱):

'code' => 'required|exists:codes', 

可以替換。

文檔:https://laravel.com/docs/5.3/validation#rule-exists

只要確保你導入這些門面。

希望這會有所幫助!

+0

非常感謝,這正是我所尋找的,但無法獲得正確的語法。這似乎是通過'RegisterController.php中的FatalThrowableError'行56: 解析錯誤:語法錯誤,意外的'碳'(T_STRING),期待','或')' – user6073700

+0

@ user6073700正如我所說,你需要以確保包含外觀,否則將其更改爲'Carbon \ Carbon :: now()' –

+0

我也是這樣做的,它仍然顯示相同的錯誤 – user6073700

1

你可以create custom validation rule。創建服務提供商並進行註冊。然後加入這樣的事情:

Validator::extend('is_code_valid', function($attribute, $value, $parameters, $validator) { 
    $code = Code::where('code', $value)->where('date', '>', Carbon::now())->first(); 
    return !$code->isEmpty(); // Pass if valid code exists in DB. 
}); 

,然後用它:當你正在使用Laravel v5.3.18

'code' => 'required|is_code_valid',