为什么Laravel验证不显示错误

时间:2019-08-27 14:52:48

标签: php laravel validation request laravel-blade

我正在尝试验证来自表单的请求并出现问题,未在视图上显示错误消息。 验证成功,刷新视图,但不显示错误。显然$ 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

具有验证功能的商店功能是这个

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';
    }

更新 在刀片中添加{{$ errors}},然后返回[],$ errors为空

6 个答案:

答案 0 :(得分:1)

代替使用$request->validate  编辑您的代码,然后使用$this->validate或以下代码:

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

答案 1 :(得分:1)

如果页面刷新意味着错误对象不为空...并且控制器中的验证代码正常工作,请在浏览器中检查带有html元素的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

答案 2 :(得分:0)

尝试

@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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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 

答案 5 :(得分:0)

这很奇怪,但是可以通过更改本地服务器来解决问题。我使用了XAMPP,现在我使用了MAMP,一切正常。如果您在Laravel本地工作,建议不要使用XAMPP。