laravel 刀片中多选选项中的旧值
Posted
技术标签:
【中文标题】laravel 刀片中多选选项中的旧值【英文标题】:Old value in multiple select option in laravel blade 【发布时间】:2016-06-07 07:42:07 【问题描述】:这是我的选择
<select name="recomemded_food[]" value="" style="width:560px;" multiple class="chosen-select" >
<option value="American Black Bear">American Black Bear</option>
<option value="Asiatic Black Bear">Asiatic Black Bear</option>
<option value="Brown Bear">Brown Bear</option>
<option value="Giant Panda">Giant Panda</option>
</select>
下面是我尝试使用 foreach 循环获取数组值的代码。但我收到以下错误:
@foreach (explode(',',old('recomemded_food')) as $recomemded_food)
$recomemded_food
@endforeach
错误信息:explode() 期望参数 2 是字符串
【问题讨论】:
old('recomemded_food')
在您的情况下是一个数组。
你想达到什么目的?
使用 Laravel Collective html 包,然后!! Form::select('recommnded_food[]', $options, null, ['multiple']) !!
。
视图或控制器中的选择值?
@JilsonThomas 在视图中
【参考方案1】:
最好的方法:
<label for="name">Tags</label>
<select name="tags[]" class="form-control select-tag" multiple>
@foreach($tags as $tag)
<option value="$tag->id" in_array($tag->id, old("tags") ?: []) ? "selected": "">$tag->name</option>
@endforeach
</select>
【讨论】:
【参考方案2】:这对我来说很好,使用collect(old('roles'))->contains($ role)
例如:
<div class="form-group">
<label for="roles" class="form-control-label">Roles</label>
<select name="roles[]" id="roles" data-placeholder="Choose role..." multiple class="standardSelect">
<option value="" label="default"></option>
@foreach($roles as $role)
<option value=" $role " !! (collect(old('roles'))->contains($role)) ? 'selected="selected"' : '' !!> $role </option>
@endforeach
</select>
</div>
【讨论】:
【参考方案3】:我认为这个问题的最佳答案如下
@if(count($categories) > 0)
@foreach($categories as $category)
<option value=" $category->id " (old('lawyer_fields') == null ? '' : in_array($category->id ,old('lawyer_fields')) ? "selected":"") >
$category->name
</option>
@endforeach
@else
<option disabled>بدون انتخاب</option>
@endif
【讨论】:
【参考方案4】:我正在解析JSON
数据,并且面临将多选重新填充为array
,并且只想要一个表,并且没有使用keys
,因为这个array
被传回controller
中的 show
方法,因此必须直接在模板上提供值,在我的情况下,作为 edit.blade.php
模板上的 crud 资源(也在 create
模板上)。
这对我有用,并且是我能在视图中看到的最干净的。
<select id="recommended_food" multiple="multiple" size=3 style='height: 100%;' name="recommended_food[]">
@if ($food->recomemded_food)
($val = 'Fries')
&& $chosen = in_array($val, $food->recommended_food)
? 'selected':null
<option value="$val" $chosen>$val</option>
($val = 'Hot Dogs')
&& $chosen = in_array($val, $food->recommended_food)
? 'selected':null
<option value="$val" $chosen>$val</option>
($val = 'Hamburgers')
&& $chosen = in_array($val, $food->recommended_food)
? 'selected':null
<option value="$val" $chosen>$val</option>
@endif
</select>
【讨论】:
【参考方案5】:这个问题被问到多项选择。
假设您有一个名为 designation 的字段,您需要选择多个 designation 来添加 1 条记录,并且字段名称为 forWhom
添加期间
你需要添加这个 (collect(old('forWhom'))->contains($key)) 吗? 'selected':'' 代码和平到你的选项标签
看起来像
<select id="forWhom" name="forWhom[]" multiple class="form-control chosen">
<option value="">--- Select ---</option>
@foreach ($desgInfo as $key => $value)
<option value=" $key "
(collect(old('forWhom'))->contains($key)) ? 'selected':'' />
$value
</option>
@endforeach
</select>
编辑期间
你需要添加
(collect(old('forWhom'))->contains($key)) ? 'selected':''
(in_array($key,$info->forWhom)) ? 'selected' : ''
看起来像
<select id="forWhom" name="forWhom[]" multiple class="form-control chosen">
<option value="">--- Select ---</option>
@foreach ($desgInfo as $key => $value)
<option value=" $key "
(collect(old('forWhom'))->contains($key)) ? 'selected':''
(in_array($key,$info->forWhom)) ? 'selected' : ''
/>
$value
</option>
@endforeach
</select>
Select all selected id's in a multiselect dropdown in laravel 5.4 with harvest chosen
谢谢
【讨论】:
这对我有用: (collect(old('forWhom'))->contains($key)) ? 'selected':''
这应该是正确的答案,因为它是用于多选的。【参考方案6】:
我就是这样做的,很有活力。
<select id="gender" name="gender">
<option>Select</option>
<option value="M">Male</option>
<option value="F">Female</option>
</select>
<script>
var currentGender = null;
for(var i=0; i!=document.querySelector("#gender").querySelectorAll("option").length; i++)
currentGender = document.querySelector("#gender").querySelectorAll("option")[i];
if(currentGender.getAttribute("value") == " old("gender") ")
currentGender.setAttribute("selected","selected");
</script>
【讨论】:
【参考方案7】:玩了一会儿之后,我想出了这个,它似乎工作得很好
<select name="options[]" id="options" class="form-control" multiple>
@foreach($settings->includes->get('optionList') as $option)
<option value=" $option->id " (collect(old('options'))->contains($option->id)) ? 'selected':'' > $option->name </option>
@endforeach
</select>
我在利用收集功能方面可能 100% 错误,但它在我的许多测试中都可以正常工作。我想对 MPS 说声谢谢,因为正是你的例子真正让我尝试了这个,因为当“recommended_food”中没有数据时,你会拉出一个错误,因为 in_array 需要一个数组并且不能很好地与 null 一起工作,所以我来了想到做这样的事情。
@if (old("options")) (in_array($option->id, old("options")) ? "selected":"") @endif
内联但对我来说看起来很丑的人,长话短说我使用以下代替
(collect(old('options'))->contains($option->id)) ? 'selected':''
希望这对其他人有所帮助!
【讨论】:
这应该是公认的答案。适用于 Laravel 7.x - 我找不到更好的在线方式,如果有的话。 Yapp 这比接受的答案要好,因为我们无法将旧值放入控制器中,因为旧值来自视图中的旧请求。在 laravel 7.x 上也为我工作 关于in_array
变体不适用于首页加载(即,当recommended_food
选择框上尚未选择任何选项时,修复很简单: in_array($food, old("recommended_food")) ?? [] ? 'selected' : '')
【参考方案8】:
对我来说,Jilson Thomas 的回答不适用于 multiple select,所以我将其更改为:
in_array($food, old("recommended_food")) ? "selected":"")
【讨论】:
这在首页加载时不起作用(即,当recommended_food
选择框上尚未选择任何选项时。这适用: in_array($food, old("recommended_food")) ?? [] ? 'selected' : '')
【参考方案9】:
如果您从 Controller 传递选择值:
$recommended_foods = ["American Black Bear",
"Asiatic Black Bear",
"Brown Bear",
"Giant Panda"];
在视图中:
<select required="required" class="form-control" name="recommended_food">
@foreach ($recommended_foods as $key => $food)
<option value=" $food" (old("recommended_food") == $food ? "selected":"") > $food </option>
@endforeach
</select>
【讨论】:
如果用户提交表单,可能是用户忘记填写另一个表单并弹出错误消息。旧的选择值会在那里吗? 是的,它会在那里。 该问题被要求进行多项选择,您给出的答案将适用于单项选择。不知道你是如何获得更多选票的。以上是关于laravel 刀片中多选选项中的旧值的主要内容,如果未能解决你的问题,请参考以下文章