如何在Laravel应用中将缓存的用户输入数据加载到表单中?
解决方案
Laravel 内置了表单旧输入闪存功能,不需要手动处理缓存,直接使用old()助手函数即可实现验证错误后回填用户修改的内容,优先级为「用户提交的未通过验证的输入 > 数据库存储的原有数据」。
1. 修改表单填充逻辑
将原表单的value属性替换为以下写法,同时兼容编辑、创建场景以及验证错误回填:
<input class="form-control" id="title" name="title" type="text" value="{{ old('title', $article?->title) }}">
old()第一个参数为表单字段的name属性值,会自动读取上一次提交的闪存输入- 第二个参数为默认值:如果没有上一次提交的输入(正常进入编辑页的场景),就读取数据库中存储的文章对应字段值;如果是创建文章场景
$article为null,默认值为空符合预期 $article?->title是PHP空安全运算符写法,如果你使用的PHP版本低于8.0,可以替换为$article ? $article->title : ''
2. 其他字段统一调整
其余字段也按照相同逻辑修改即可,例如下拉选择分类的场景:
<select name="encyclopedia_category_id" class="form-control"> @foreach($categories as $category) <option value="{{ $category->id }}" {{ old('encyclopedia_category_id', $article?->encyclopedia_category_id) == $category->id ? 'selected' : '' }} > {{ $category->name }} </option> @endforeach </select>
原理说明
你当前使用的$request->validate()验证方法本身就会自动将用户的全部输入闪存到Session中,不需要额外编写存储逻辑,old()函数就是直接读取这部分闪存数据,整个流程框架已经做好了封装,直接调用即可。
内容的提问来源于stack exchange,提问作者lucas_deflores
相关产品推荐
相关产品推荐

