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'))-&gt;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'))-&gt;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 刀片中多选选项中的旧值的主要内容,如果未能解决你的问题,请参考以下文章

如何在刀片 laravel 8 中获取选择输入的旧值?

如何在GridView中实现多选

antd多选框选项太多数据量太大出现页面卡顿怎么解决

从结果表中多选到oracle中的单行

JS获取select option获取选中的值多选

如何在多选表单 laravel 中选择所有选项?