📅  最后修改于: 2023-12-03 15:37:49.866000             🧑  作者: Mango
当我们在 Laravel 中使用表单时,经常需要填充下拉选项的值。这在处理表单编辑时非常有用。例如,在编辑用户信息表单时,我们可以提供一个下拉选项,供用户选择其所在的城市。
当用户提交表单时,我们常常也需要填充旧值在下拉选项中。这可以让用户直接编辑现有值而不必重新选择。在本文中,我们将研究如何在 Laravel 中使用旧值填充下拉选项。
在 Laravel 中,我们可以使用 old
辅助函数轻松访问旧值。old
函数将返回上次提交的表单中一个具有给定名称的输入的值。我们可以在视图中使用 old
函数轻松访问这个值。例如,在 Blade 模板中,我们可以这样编写:
<select name="city">
<option value="paris" {{ old('city') == 'paris' ? 'selected' : '' }}>Paris</option>
<option value="new-york" {{ old('city') == 'new-york' ? 'selected' : '' }}>New York</option>
<option value="tokyo" {{ old('city') == 'tokyo' ? 'selected' : '' }}>Tokyo</option>
<option value="beijing" {{ old('city') == 'beijing' ? 'selected' : '' }}>Beijing</option>
</select>
在上面的示例中,我们在 option
元素上使用 old('city')
函数来获取旧值。如果当前值为 paris
,则 old('city')
将返回 paris
。
我们还在选项元素上使用三元操作符 ?
和 :
来检查旧值和当前值之间的差异。如果旧值和当前值相同,则我们需要将 selected
属性添加到该选项。
有时,我们需要动态生成下拉选项(例如,从数据库中读取)。在这种情况下,我们需要使用一些不同的技术来填充旧值。
首先,我们可以将选项数据绑定到控制器中。例如,如果我们正在编辑一个 User
模型,我们可以在控制器中设置以下代码:
$cities = City::all()->pluck('name', 'id');
return view('edit-user', compact('user', 'cities'));
在上面的代码中,我们获取了所有城市的名称和 ID,然后将其绑定到 cities
变量中。
接下来,我们可以将 cities
变量传递给 Blade 模板:
<select name="city">
@foreach($cities as $id => $name)
<option value="{{ $id }}" {{ old('city', $user->city_id) == $id ? 'selected' : '' }}>
{{ $name }}
</option>
@endforeach
</select>
在上面的示例中,我们首先使用 Blade 的 foreach
循环来遍历 $cities
变量中的城市。我们还使用 old
和 $user->city_id
来填充旧值。
如果我们刚刚提交表单,但在编辑表单时遇到错误,那么 old('city')
函数将返回旧值。否则,我们将使用 $user->city_id
来填充默认值。