laravel刀片中多个选择选项中的旧值

时间:2016-02-24 20:03:18

标签: php arrays laravel laravel-5

这是我的选择选项

<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为字符串

9 个答案:

答案 0 :(得分:21)

在玩了一下之后,我想出了这个,它看起来非常出色

<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>

我在利用collect函数方面可能100%错误,但它在我的许多测试中都能正常工作。我想说谢谢MPS,因为这是你的例子,真的让我尝试这个,因为没有数据在&#34; recommended_food&#34;你会得到一个错误,因为in_array需要一个数组并且不能很好地使用null,所以我想出了这样做的想法。

@if (old("options")){{ (in_array($option->id, old("options")) ? "selected":"") }}@endif

内联,但对我来说看起来很难看的男人这么长的故事,我正在使用以下代替

{{ (collect(old('options'))->contains($option->id)) ? 'selected':'' }}

希望这有助于其他人!!

答案 1 :(得分: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>

答案 2 :(得分:4)

对我来说,Jilson Thomas的回答不适用于多选所以我将其更改为:

{{ in_array($food, old("recommended_food")) ? "selected":"") }}

答案 3 :(得分:3)

有人要求选择多个问题。

假设你有一个叫做指定的字段,你需要选择多个指定来添加1个记录,而字段名称是 forWhom

在添加

期间

您需要添加 {{(收集(旧(&#39; forWhom&#39;)) - &gt;包含($ key))? &#39;选择&#39;:&#39;&#39; 代码的和平与您的选项标记

看起来像

<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

由于

答案 4 :(得分:1)

这就是我的方式,非常有活力。

<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>

答案 5 :(得分: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>

答案 6 :(得分:0)

我正在解析JSON数据,并且面临将多选项重新填充为array,并且只需要一个表,并且没有使用keys,因为这array的{​​{1}}方法正在传递show,因此必须直接在模板上提供值,在我的情况下,作为controller上的crud资源模板(也在edit.blade.php模板上)。

这对我有用,并且是我在视图中得到的最干净的。

create

答案 7 :(得分:0)

我认为这个问题的最佳答案是 @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

答案 8 :(得分:0)

使用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>