代码之家  ›  专栏  ›  技术社区  ›  akg1421

通过添加自定义错误使验证失败/强制验证失败,该错误在Laravel中不起作用

  •  2
  • akg1421  · 技术社区  · 8 年前

    我试图使验证失败。我尝试了以下方法:

    用户控制器。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');
    }
    

    这个

    我尝试过这样的解决方案:

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

    这是丑陋的,因为在视图中,它总是给出默认错误“unreal_input is required field”。救命!!

    我用了$messsages和3秒

    1 回复  |  直到 8 年前
        1
  •  0
  •   Margus Pala    8 年前

    您的更改很好,因此您可以添加 $rules['unreal_input'] $messages['unreal_input.required']