一、需求

使用 Laravel5.6 开发,表单提交后如果验证失败,则返回之前填写的页面,并且将一些内容自动的填写进表单。

我一般很少直接使用 Laravel 的验证器,不是因为他不好用,而是很局限。

我更喜欢自己去写自己的验证逻辑,并且错误信息的返回我也很推崇下面的模式:

在 common.blade.php 中通过 @if 判断当前是否 flash 的错误信息
判断是 error 还是 success 类型
直接通过 <script> 调用不同的通知类型

当然,错误信息的返回不是什么问题,主要的问题是需要返回表单填写页面的时候能够获取到之前的一些数据,不用再次填写。

使用 ajax 当然不需要考虑这个问题,但是页面跳转还是需求蛮大的。

二、实现

关键的部分在两点,比如有一个表单提交处理方法是 handleFormSubmit(Request $request)

1、 flash Session

主要的思想和上面错误信息返回是一样的,通过 flash session 将数据进行一次性缓存。

$request$request->flash() 方法便是这个作用。

它会将表单中 submit 的数据进行 flash。

2、 back()

$request->flash() 之后,便可以 redirect

我一般直接使用 back() 返回之前的页面。

3、 html 中获取数据

想要在 html 中获取数据,使用的助手函数是 old()

<input type="text" name="name" value="{{old('name')}}">