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