-
在提交的表单中必须要要添加
@csrf
,防止表单伪造<form method="POST" action="/profile"> @csrf ... </form>
-
表单不能发出 PUT、 PATCH 及 DELETE 请求,需要加入隐藏的 _method 域来模仿这些 HTTP 动词。即:
@method('PUT')
<form action="/foo/bar" method="POST"> @method('PUT') ... </form>
3.old函数获取一次性存放在session中的值,用在表单的value属性中。这样当我们输出错误回调页面时,原来输入的值还存在。
在表单的input中添加value={{old(‘name’)}},此变量也是闪存变量
<input type="text" class="form-control" name="name" value={{old('name')}}>
-
相应控制器的store方法中编写逻辑来验证表单。即使用 Illuminate\Http\Request 对象提供的 validate 方法 。如果验证通过,代码就可以正常的运行。如果验证失败,则会抛出异常,并自动将对应的错误响应返回给用户。在典型的 HTTP 请求的情况下,会生成一个重定向响应,而对于 AJAX 请求则会发送 JSON 响应。
public function store(Request $request) { $validatedData = $request->validate([ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]); }
如果验证失败,Laravel 会自动生成一个对应的响应。会自动把用户重定向到之前的位置。另外,所有的验证错误信息会被自动存储到 session。如果验证通过,那我们的控制器将会继续正常运行。
验证不过时不必在 GET 路由中将错误消息显式绑定到视图。因为 Lavarel 会检查在 Session 数据中的错误信息,并自动将其绑定到视图(如果这个视图文件存在)。而其中的变量 $errors 是 Illuminate\Support\MessageBag 的一个实例。(直接可以在返回的视图中调用$errors变量,里面含错误信息)
$errors是一个闪存变量
@if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
如果希望在某个属性第一次验证失败后停止运行验证规则,你需要附加 bail 规则到该属性:
$request->validate([ 'title' => 'bail|required|unique:posts|max:255', // 添加了Bail规则 'body' => 'required', ]);
-
常用规则
规则 | 说明 |
---|---|
confirmed | 验证的字段必须和 foo_confirmation 的字段值一致。例如,如果要验证的字段是 password,输入中必须存在匹配的 password_confirmation 字段。 |
size | 验证的字段必须具有与给定值匹配的大小。对于字符串来说,value 对应于字符数。对于数字来说,value 对应于给定的整数值。对于数组来说, size 对应的是数组的 count 值。对文件来说,size 对应的是文件大小(单位 kb )。 |
max | 验证中的字段必须小于或等于 value。字符串、数字、数组或是文件大小的计算方式都用 size 方法进行评估 |
min | 验证中的字段必须具有最小值。字符串、数字、数组或是文件大小的计算方式都用 size 方法进行评估 |
unique | unique:table,column,except,idColumn验证的字段在给定的数据库表中必须是唯一的。如果没有指定 column,将会使用字段本身的名称 |
required | 验证的字段必须存在于输入数据中,而不是空。如果满足以下条件之一,则字段被视为「空」: 该值为 null. 该值为空字符串。 该值为空数组或空的 可数 对象。 该值为没有路径的上传文件。 |
验证的字段必须符合 e-mail 地址格式。 | |
sometimes | 只有在该字段存在时, 才对字段执行验证 |
nullable | 如果你不希望验证程序将 null 值视为无效的,那就将「可选」的请求字段标记为 nullable,也可以理解为有值时才验证。 |
$request->validate([
'title' => 'required|unique:posts|max:255',
'body' => 'required',
'publish_at' => 'nullable|date',
]);
在这个例子里,我们指定 publish_at 字段可以为 null 或者一个有效的日期格式。如果 nullable 的修饰词没有被添加到规则定义中,验证器会认为 null 是一个无效的日期格式。
-
报错的语言包(默认为英语)
默认表单提示是英文的,我们可以安装中文语言包进行汉化。composer require caouecs/laravel-lang:~3.0
包含大多数语言,语言包位于vendor/caouecs/larvel-lang/src 目录中。
使用
根据需要复制语言包到 resources/lang 目录中。
修改 config/app.php 配置文件
'locale' => 'zh-CN',