在我的 laravel 应用程序中,验证错误不会显示在视图中。我怎样才能实现它?

Posted

技术标签:

【中文标题】在我的 laravel 应用程序中,验证错误不会显示在视图中。我怎样才能实现它?【英文标题】:In my laravel application, validation errors are not getting displayed in the view. How can i achieve it? 【发布时间】:2019-06-02 11:54:30 【问题描述】:

我正在使用 Laravel 框架 5.8.15。我正在验证我的一些表单输入。验证器失败后,它会将我重定向回视图,但不显示任何错误。

我的控制器是:

public function store(Request $request)
    
        $this->validate($request, [
            'donator_first_name' => 'required|alpha|max:50',
            'donator_middle_name' => 'required|alpha|max:50',
            ]);

            donations::create([
              'donator_first_name' => $request->get('donator_first_name'),
              'donator_middle_name'=> $request->get('donator_middle_name')
            ]);

            return back()->with('success', 'You have just created one item');
    

我的表格是:

<div class="form-group">
                <label>Donator's Surname: </label>
                <input class="form-control"  id="donator_last_name" name="donator_last_name"  placeholder="Enter Surname" required>
            </div>


            <div class="form-group">
                <label>Donator's First Name: </label>
                <input class="form-control" id="donator_first_name" name="donator_first_name" placeholder="Enter First Name" required>
            </div>


            <div class="form-group">
                <label>Donator's Father's Name: </label>
                <input class="form-control" id="donator_middle_name" name="donator_middle_name" value=" old('donator_middle_name') " placeholder="Enter Father's Name" required>
            </div>

我的看法是:

@if ($errors->any())
            dd($errors)
            <div class="alert alert-danger">
                <ul>
                    @foreach ($errors->all() as $error)
                        <li> $error </li>
                    @endforeach
                </ul>
            </div>
          @endif

          @if (\Session::get('success'))
              <div class="alert alert-success">
                  <p> \Session::get('success') </p>
              </div>
          @endif

【问题讨论】:

【参考方案1】:

你的代码似乎没问题。不要忘记将 csrf_field() 添加到表单中。

在视图上试试这个:

 @if (count($errors) > 0)
                                    <div class="alert alert-danger alert-dismissible" role="alert">
                                        <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span>
                                        </button>
                                        <strong>Error!</strong> 
                                        @foreach ($errors->all() as $error)
                                            <p> $error </p>
                                            @endforeach
                                        </div>
                                        @endif

                                        @if(session('success'))
                                        <div class="alert alert-info alert-dismissible" role="alert">
                                            <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span>
                                            </button>
                                            <strong>Successfull!</strong> 
                                             session('success') 
                                        </div>                        
                                       @endif

                                        @if(session('wrong'))
                                        <div class="alert alert-danger alert-dismissible" role="alert">
                                            <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span>
                                            </button>
                                            <strong>Error!</strong> 
                                             session('wrong') 
                                        </div>                        
                                       @endif

然后你的控制器试试这个:

return redirect("urlpath")->with('success','You have just created one item');

【讨论】:

感谢您的回复!但它在视图中显示为空。 @samju 我找不到它没有向我显示会话数据的原因。如果我在控制器中打印会话,它会显示,但它不会在视图中显示。 在你的控制器上试试这个'use Session;' 是的,它显示警报(因为我已经删除了 if 条件)但为空。不显示任何消息【参考方案2】:

我在表单提交操作中调用 API。这就是为什么我无法在我的视图中获得会话。

【讨论】:

以上是关于在我的 laravel 应用程序中,验证错误不会显示在视图中。我怎样才能实现它?的主要内容,如果未能解决你的问题,请参考以下文章

在我的 Inertia laravel 应用程序中获取 View [app] not found 错误

Vuejs如何显示laravel输入数组验证错误

我最近在我的 laravel 项目中使用了 JCrop,但是虽然我选择了一张照片并加载了它,但我得到了验证错误 image is requred

Laravel 默认登录身份验证生成意外错误

如何自定义 laravel 数组验证错误键和消息

如何在Laravel SMTP中解决2个可能的身份验证器错误