web-dev-qa-db-ja.com

laravelブレードの複数選択オプションの古い値

これが私の選択オプションです

<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が文字列であることを期待しています

10
Jackaroo Ng

コントローラーから選択値を渡す場合:

$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>
7
Jilson Thomas

少し遊んだ後、私はこれを思いつきました、そしてそれは素晴らしくうまくいくようです

<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%間違っているかもしれませんが、私のテストの多くでは問題なく機能します。 「recommended_food」にデータがない場合、in_arrayには配列が必要であり、nullではうまく機能しないためエラーが発生するため、実際にこれを試したのはMPSのおかげです。このようなことをするというアイデアを思いついた。

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

インラインですが、私には醜く見えるので、長い話は短くて、代わりに次を使用しています

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

これが他の人に役立つことを願っています!!

27
Carlos Quinones

質問は、複数を選択して尋ねられました。

「指定」というフィールドがあり、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>

laravel 5.4収穫を選択して5.4で複数選択ドロップダウンで選択したすべてのIDを選択

ありがとう

5
Saroj

私にとっては、Jilson Thomasの答えはmultiple selectでは機能しなかったため、次のように変更しました。

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

これが私のやり方で、とてもダイナミックです。

<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>
1
Leonardo Hessel

JSONデータを解析していて、arrayとして複数選択を再設定する必要があり、1つのテーブルしか必要としておらず、keysarrayメソッドから__SOME_VARIABLEのサプライに渡されたため、showが__SOME_VARIABLEに供給されていたため、controllerを使用していませんでした。テンプレートの値(私の場合はedit.blade.phpテンプレート(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>
0
blamb

この質問に対する最良の答えはこれは以下です

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