为啥 laravel 验证不显示错误
Posted
技术标签:
【中文标题】为啥 laravel 验证不显示错误【英文标题】: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
【参考方案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);
【讨论】:
相同的 $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">×</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
【讨论】:
【参考方案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以上是关于为啥 laravel 验证不显示错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Api Route 在 laravel 应用程序中不起作用,显示错误(未找到 404 错误)?