【问题标题】:Laravel Validation with Flash Message and Custom Validation Parameters带有 Flash 消息和自定义验证参数的 Laravel 验证
【发布时间】:2016-10-25 10:39:48
【问题描述】:

我有这样的 Laravel 5 验证:

$this->validate( $request, [
    'zipcode' => 'required',
    'province' => 'required',
    'address' => 'required',
    'number' => 'required',
    'phone' => 'required'
] );

如果验证失败,如何设置错误闪烁消息?我正在使用laracast/flash 库,它支持像这样设置flash 消息:

flash()->error('Validation Fails');

我知道我可以像这样使用 Validator 包:

use Validator;

$validation = Validator::make( $request->all(), [] );

但我想在不使用 use Validator; 的情况下最小化我的代码,并通过 $this->validate() 函数使用 Laravel 基本验证。

另外,如果需要,如何返回额外的会话或参数?我试过这样但它不起作用:

$this->validate( $request, [] )->with( 'foo', 'bar' );

我该怎么做?

【问题讨论】:

    标签: validation laravel


    【解决方案1】:

    这是使用@Juan José González 方法在我身上起作用的方法:

    是的,别忘了:

    use Validator;
    use Redirect;
    

    在我看来:

    @if (count($errors) > 0)
        @foreach ($errors->all() as $error)
        <div class="alert alert-success alert-dismissible fade show" id="formMessage" role="alert">
            {{ $error }}
            <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                <span aria-hidden="true">&times;</span>
            </button>
        </div>
        @endforeach
    @endif
    

    【讨论】:

      【解决方案2】:

      在您的控制器中:

          $rules = array(
                  'zipcode' => 'required',
                  'province' => 'required',
                  'address' => 'required',
                  'number' => 'required',
                  'phone' => 'required'
          );
      
          $validator = Validator::make($request->all(), $rules);
      
          if ($validator->fails())
          {
              return Redirect::to('/url_form')->withInput()->withErrors($validator);
          }
      

      在您的刀片模板中:

        @if($errors->has())
        @foreach ($errors->all() as $error)
        <p class="yellow-text font lato-normal center">{{ $error }}</p>
        @endforeach
        @endif
      

      祝你好运!

      【讨论】:

        【解决方案3】:

        使用$this-&gt;validate() 时,如果您的验证失败,您将返回到之前的 URL,其中包含会话中未通过验证规则的字段的所有错误和错误消息,因此您不需要另外将任何内容闪烁到会话中。如文档中所述:

        那么,如果传入的请求参数没有通过给定的验证规则怎么办?如前所述,Laravel 会自动将用户重定向回他们之前的位置。此外,所有的验证错误都会自动闪现到会话中。

        您可以做的是检查视图中是否存在错误消息并输出所需的文本。如文档中所述,您可以使用视图中的 $errors 变量访问错误:

        再次注意,我们不必在 GET 路由中将错误消息显式绑定到视图。这是因为 Laravel 会检查会话数据中的错误,并在它们可用时自动将它们绑定到视图。 $errors 变量将是 Illuminate\Support\MessageBag 的一个实例。有关使用此对象的更多信息,请check out its documentation

        例如,在您看来,您可以执行以下操作:

        @if (count($errors) > 0)
            <div class="alert alert-danger">
                Validation Fails
            </div>
        @endif
        

        如果您确实需要将数据闪存到会话中,您可以尝试在控制器方法中检查 $errors 变量以加载视图,然后根据其值将数据放入会话中。从未尝试过,因此您可能需要对其进行测试。

        // method for loading the view
        public function index()
        {
            if(count($errors) > 0) {
                session()->put('foo', 'bar');
            }
        
            return view('my-form');
        }
        

        另外考虑一下,您不必使用$this-&gt;validate(),而是可以使用Form Request Validation。此外,作为一般建议,可能值得查看有关验证工作原理的文档:https://laravel.com/docs/5.2/validation#introduction

        希望有帮助!

        【讨论】:

          猜你喜欢
          • 2016-01-29
          • 2014-05-31
          • 2017-06-28
          • 2017-12-13
          • 1970-01-01
          • 1970-01-01
          • 2017-08-30
          • 2020-07-18
          • 1970-01-01
          相关资源
          最近更新 更多