2017-09-10 7 views
1

検証を失敗させようとしています。私は、次のことを試してみました:カスタムエラーを追加して検証を失敗/失敗させる

UserController.php

public function add_user(Request $request) 
{ 
$messsages = array(
    'email.unique' => 'Email already exists', 
    'email.required' => 'Email is missing', 
    'valid_from.date_format' => 'Valid from date invalid. mm/dd/yyyy e.g. 12/13/2014', 
    'valid_to.date_format' => 'Valid to date invalid. mm/dd/yyyy e.g. 12/13/2014', 
    'valid_to.required' => 'Valid to date is missing', 
    'cnic.min' => 'CNIC is 15 characters long. Do not forget hyphens 35212-XXXXXXX-X', 
    'cnic.max' => 'CNIC is 15 characters long. Do not forget hyphens 35212-XXXXXXX-X', 
    'cnic.regex' => 'CNIC include hyphens 35212-XXXXXXX-X' 
); 

$rules = array(
    'name' => 'required', 
    'email' => 'required|email|unique:users', 
    'valid_from' => 'required|date_format:m/d/Y', 
    'valid_to' => 'required|date_format:m/d/Y', 
    'phone' => 'numeric', 
    'cnic' => [ 
    'min:15', 
    'max:15', 
    'regex:/\d{5}-\d{7}-\d{1}/' 
    ] 
); 

$validator = Validator::make($request->all(), $rules, $messsages); 

//Check year 
$y_from = substr($request->valid_from, -4); $y_from = (int)$y_from; 
$y_to = substr($request->valid_to, -4); $y_to = (int)$y_to; 
if($y_from >= 2038 || $y_to >= 2038) //HERE I ADD CUSTOM ERROR 
{ 
    $validator->getMessageBag()->add('maxyear', 'Invalid date. Maximum value of Year = 2038'); 
    //$validator->errors()->add('maxyear', 'Invalid date. Maximum value of Year = 2038'); //Doesnt work as above 
} 

if ($validator->fails()) { //DOESNT WORK 
    $messages = $validator->messages(); 
    return Redirect::route('userAdd')->withErrors($messages); 
} 

$user = new User; 
$user->name = $request->name; 
/* Save other model data */ 

$user->save(); 
Session::flash('userCreated', 'User Created Successfully'); 

return redirect('/pending_users'); 
} 

を$ validator->は(失敗した)は何とか真になると、検証が失敗しない...

を私が試してみましたソリューションは次のようになります:

if($y_from >= 2038 || $y_to >= 2038) 
{ 
    //$validator->getMessageBag()->add('maxyear', 'Invalid value for Year in date. Max year = 2038'); 
    //$validator->errors()->add('maxyear', 'Invalid date. Maximum value of Year = 2038'); 
    $rules['unreal_input'] = 'required'; 
    $messages['unreal_input.required'] = 'Invalid date. Maximum value of Year = 2038'; 
} 

$validator = Validator::make($request->all(), $rules, $messsages); 

ビューのように醜いです。デフォルトのエラー "unr eal_inputは必須フィールドです "msgid。助けて!!

UPDATE

それは私が$ messsagesを参照してください、3秒

答えて

0

あなたがタイプミスをしているしかし、あなたは$rules['unreal_input']$messages['unreal_input.required']

を追加するように、あなたの変更が良好であると$ messsagesを使用タイプミスでしたvs $ messages。 1つのケースでは3x "s"のケースがありますが、それ以外のケースでは2xしかないので配列が異なります。

+0

ありがとうございました! $ validator-> errors() - > add()が検証を失敗させることができないという一般的に提案された方法をなぜ理解するのに役立ちますか? – akg1421

+0

getMessageBag() - > add()は検証ロジックに影響しません。検証の失敗は$ request-> all()と$ rulesの値はコード上でのみ異なります。 –

関連する問題