在 auth 上将附加错误消息传递给验证错误包

Posted

技术标签:

【中文标题】在 auth 上将附加错误消息传递给验证错误包【英文标题】:Passing additional error message to validation error bag on 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' 与其他验证器错误一起发送到视图的正确方法是什么?

【问题讨论】:

【参考方案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 
   

【讨论】:

以上是关于在 auth 上将附加错误消息传递给验证错误包的主要内容,如果未能解决你的问题,请参考以下文章

如何在屏幕上显示带有附加的数据的验证错误消息?

带有错误消息的自定义验证器的 angularjs 指令

如何将自定义验证消息传递给 laravel 中的 cviebrock/image-validator?

如何在登录失败时显示错误消息?

在注册页面添加验证消息

尝试在 phpMyAdmin 上将 db.sql 导入我的数据库时出现错误消息?