2016-10-31 11 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|exists:codes', 

を置き換えることができます:

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

(上記はexpiry_dateあなたのdbテーブル内の列の実際の名前であると仮定しています)。

ドキュメント:https://laravel.com/docs/5.3/validation#rule-exists

ちょうどあなたがそれらのファサードをインポートすることを確認してください。

希望すると便利です。

+0

これはまさに私が探していたが、構文を正しく得ることができなかった多くありがとう。 'FatalThrowableError in RegisterController.php 56行目: 構文解析エラー:予期しない 'Carbon'(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',