【问题标题】:Why laravel validation don't displaying errors为什么 laravel 验证不显示错误
【发布时间】:2019-12-31 19:02:39
【问题描述】:

我正在尝试验证来自表单的请求并出现问题,但未在视图上显示错误消息。 验证成功,刷新视图但不显示错误。显然 $errors 总是空的 我在全新安装时对其进行了测试。

Laravel 版本:5.8.33 PHP版本:7.3.8 数据库驱动和版本:mysql 5.7.22

表格是这个

@section('content')    
    @if ($errors->any())
        <div class="alert alert-danger">
            <ul>
                @foreach ($errors->all() as $message)
                    <li>{{ $message }}</li>
                @endforeach
            </ul>
        </div>
    @endif

    <form class="form-group" method="POST" action="/trainers" enctype="multipart/form-data">
        @csrf   

        <div class="form-group">
            <label for="">Nombre</label>
            <input type="text" name="name" value="@isset($trainer->name){{$trainer->name}}@endisset" class="form-control">
        </div>

        <div class="form-group">
            <label for="">Slug</label>
            <input type="text" name="slug" value="@isset($trainer->slug){{$trainer->slug}}@endisset" class="form-control">
        </div>

        <div class="form-group">
            <label for="">Descripción</label>
            <input type="text" name="description" value="@isset($trainer->description){{$trainer->description}}@endisset" class="form-control">
        </div>

        <div class="form-group">
            <label for="">Avatar</label>
            <input type="file" name="avatar">
        </div>

        <button type="submit" class="btn btn-primary">Guardar</button>
        </form>
@endsection

带有验证的store函数是这样的

public function store(Request $request)
    {
        $validatedData = $request->validate([
            'name' => 'required|max: 10',
            'avatar' => 'required|image',
            'slug' => 'required',
            'description' => 'required',
        ]);

        $trainer = new Trainer();
        $file = $request->file('avatar');

        if ($file != "") {
            $name = time().$file->getClientOriginalName();
            $file->move(public_path().'/images/', $name);
            }
            else{
                $name = "Sin Imagen.jpg";
                }
        // return $name; //Ver nombre archivo
        $trainer->name = $request->input('name');
        $trainer->avatar = $name;
        $trainer->description = $request->input('description');
        $trainer->slug = $request->input('slug');
        $trainer->save();

        return 'Saved';
    }

更新 在blade中添加{{ $errors }}并返回[],$errors为空

【问题讨论】:

  • 您没有向客户端发送验证数据。
  • 你的提交途径是什么?
  • Route::resource('trainers', 'TrainerController');
  • 为了补充@Jerodev 所说的内容,您创建了验证对象$validatedData,但您没有对它做任何事情。您只需保存传入的值并始终返回“已保存”
  • 我正在学习一个与我的代码完全相同的教程,它适用于早期版本的 Laravel

标签: php laravel validation request laravel-blade


【解决方案1】:

而不是使用$request-&gt;validate 编辑您的代码并改用$this-&gt;validate或此代码:

$messages = [
              'description.required' => 'description is required',
       ];
        $validator = Validator::make($request->all(), [
            'name' => 'required|max: 10',
            'avatar' => 'required|image',
            'slug' => 'required',
            'description' => 'required',
        ],$messages);

【讨论】:

  • 相同的 $this->validate
  • 如果您得到Class ... not found,请尝试修复命名空间,例如\Validator,或者在文件顶部添加use Validator; 行。
  • 使用验证器;或使用 Illuminate\Support\Facades\Validator;
  • Integrity constraint violation: 1048 Column 'name' cannot be null (SQL: insert into trainers` (name, avatar, description, slug, updated_at, created_at) 值 (?, Sin Imagen.jpg, ?, ? , 2019-08-28 22:49:48, 2019-08-28 22:49:48))`
【解决方案2】:

如果页面刷新意味着错误对象不为空...并且您在控制器中的验证代码正常工作,因此请在浏览器中使用检查元素检查 html 代码。可能错误框已隐藏或进行测试,您可以在刀片中使用此代码

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

【讨论】:

  • 没有区别,用 chrome 检查,我没有看到错误框。在刀片中使用此代码并添加 {{ $errors }} ,显示 [],为空?
【解决方案3】:

试试这个

@if(session('success_message'))
            <div class="alert alert-success alert-dismissible" role="alert">
              <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span> </button>
              <strong>Successful!</strong> {{ session('success_message') }}</div>
            @endif
            @if(session('error_message'))
            <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('error_message') }}</div>
            @endif

        @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

【讨论】:

    【解决方案4】:

    应该添加到方法 withError() 如上

    if ($validator->fails())
    {
       return redirect()
        ->back()
        ->withErrors($validator)
        ->withInput();
    }
    

    【讨论】:

      【解决方案5】:
      I hope this will help you 
      
      $validator = Validator::make($request->all(), [
          'amount' => 'required|amount|numeric|min:25'
      ])->validate();
      
      if (isset($validator) && $validator->fails()) {
          return redirect()->route('investment')
              ->withErrors($validator)
              ->withInput();
      }
      
      in your blade file add below code
      @if (count($errors) > 0)
      <div class = "alert alert-danger">
        <ul>
           @foreach ($errors->all() as $error)
              <li>{{ $error }}</li>
           @endforeach
        </ul>
       </div>
      @endif 
      

      【讨论】:

        【解决方案6】:

        这很奇怪,但通过更改本地服务器解决了问题。我使用了 XAMPP,现在我使用了 MAMP,一切都很完美。如果你在本地使用 Laravel,我建议不要使用 XAMPP。

        【讨论】:

        • MAMP 仅适用于 Mac,不是吗?
        • 也适用于 Windows
        猜你喜欢
        • 2019-08-08
        • 2012-12-30
        • 2012-04-03
        • 1970-01-01
        • 2021-05-09
        • 1970-01-01
        • 2016-06-28
        • 2018-12-05
        • 1970-01-01
        相关资源
        最近更新 更多