【问题标题】:Passing additional error message to validation error bag on auth在 auth 上将附加错误消息传递给验证错误包
【发布时间】:2017-07-10 03:49:02
【问题描述】:

我正在使用 Laravel 中默认提供的 RegisterController。它里面有一个默认的验证器,但是,我想在里面返回额外的消息,这样我就可以知道它是重新打开关联模式的表单。

protected function validator(array $data)
{
    $validator =  Validator::make($data, [
        'name' => 'required|max:255',
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|min:6|confirmed',
    ]);

    $messages = $validator->errors();
    $messages->add('registerError', 'Custom Message');

    return $validator;
}

我试过了,但不知道如何返回 $messages,因为在返回的验证器结果之后有一个 validate() 函数:

$this->validator($request->all())->validate();

'registerError' 与其他验证器错误一起发送到视图的正确方法是什么?

【问题讨论】:

    标签: php laravel validation authentication


    【解决方案1】:

    如果您在一个页面上有多个表单,您可以使用命名错误包。看看here

    在你的RegisterController 中替换这个:

    public function register(Request $request)
    {
        $validator = $this->validator($request->all());
    
        // rest of the register method code here...
    }
    

    有了这个:

    public function register(Request $request)
    {
        $validator = $this->validator($request->all());
    
        if ($validator->fails()) {
            return redirect()
                ->back()
                ->withInput()
                ->withErrors($validator, 'register');
        }
    
        // rest of the register method code here...
    }
    

    然后你可以像这样在你的视图中捕捉它:

    @if ($errors->register->any())
        // open the modal
    @endif
    

    【讨论】:

    • 谢谢。使用这种方法,我无法在刀片中使用 $errors->has('register') 捕获它。实现它的正确方法是什么?
    • 更新了答案。立即尝试。
    • 谢谢。我让它为寄存器工作。但是,现在由于某种原因我无法得到其余的。我现在应该如何访问默认错误?例如,$errors->has('username') 现在不起作用。我现在如何访问用户名?
    • 查看我在答案中链接到的文档。
    【解决方案2】:

    我在下面对您的代码进行了一些更改,关于如何使用您的验证器实例正确添加和返回错误

    protected function validator(array $data)
     {
        $validator =  Validator::make($data, [
                 'name' => 'required|max:255',
                 'email' => 'required|email|max:255|unique:users',
                 'password' => 'required|min:6|confirmed',
        ]);
    
       return $validator;
    

    }

    然后在你的控制器方法中

       $validator = $this->validator($this->request->all());
    
       if($validator->fails()){
    
          $validator->errors()->add('registerError', 'Custom Message'); 
    
          return View::make('myview')->withErrors($validator);
    
        } else {
          // Do something else you want to do 
       }
    

    【讨论】:

      猜你喜欢
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 2016-02-29
      • 2015-02-27
      • 1970-01-01
      相关资源
      最近更新 更多