填写表单时,利用 old () 记住之前填写的选择框数据以及时间栏数据
之前学习了本站的 Laravel Web 开发实战入门教程,在填写注册表单的时候使用了value = "{{ old('value') }}"
来保留表单提交失败时之前填过的数据。
然而这个简单直接的方法只适用于文本类型的数据,对于单选框、复选框或者时间框中的数据就无能为力了。
在参考了这个提问的答案: 如何在复选框配合 old () 来保持原来选中的 之后,我在使用 {{ old('value') }}
这个方法时添加了判定条件,在自己的项目中完成了对多种类型数据输入框的数据保留。
以这个请假信息新增表为例:
以下是一些实例:
- 使单选框记住选项:
<select name="staff_id" id="name_select"> <option value=""> -----请选择----- </option> @foreach($staffs as $staff) <option value="{{ $staff->id }} " @if(old('staff_id') == $staff->id) selected @endif> {{ $staff->staffname }} </option> @endforeach </select>
对单选下拉框赋值时,判断上一次选择的值是否等于这个选项的值,如果是,那么选中。
效果图:
- 使时间框记住所填时间:
<input type="datetime-local" name="absence_start_time" @if (old('absence_start_time')!=null) value="{{ date('Y-m-d',strtotime(old('absence_start_time'))).'T'.date('H:i',strtotime(old('absence_start_time'))) }}" @endif />
由于在 HTML 中,"datetime" 的格式为
2019-06-04T14:19
,我们必须用字符串拼接的方式将 PHP 的时间格式转化为 HTML 的格式。另外,我使用判断条件@if (old('absence_start_time')!=null)
,是因为如果不加这个判断,表单将被赋予初始值1970-01-01T00:00
,这会对表单填写增加不便。
效果图:
处理这些特殊的数据类型,我们需要活学活用,举一反三。这几天一边学习 Laravel 框架一边做项目,收获很大。
本作品采用《CC 协议》,转载必须注明作者和本文链接