Как установить значение selected в компоненте формы SELECT на Laravel

В официальной документации об этом написано, но все-таки пальцем не показано на 100%, поэтому этот вопрос пришлось гуглить и чуток поэксперементировать. Ниже в статье привожу еще один способ.

Мне нужно редактировать карточку товара, выбрать её из базы данных и установить текущую категорию товара в соответствующий SELECT. На выходе должен получиться такой HTML(это AdminLTE, кому интересно):

<div class="form-group">
<label>Категория</label>
  <select class="form-control select2" name="category_id">
    <option selected="selected" value="1">Салаты</option>
    <option value="2">Овощи</option>
  </select>
</div>

этому соответствует такой код формы (использую Laravel 6), в котором первый параметр — name, второй — массив данных вида ‘1’ => ‘Овощи’, третий — значение по умолчанию, четвертый — класс самого компонента SELECT.

<div class="form-group">
    <label>Категория</label>
{{Form::select('category_id',
        $categories,
        $product->getCategoryID(), // значение по умолчанию
        ['class' => 'form-control select2',]
        )
}}
</div>

PS от 18.03.2021. Читаю свою статью и как-то сложновато понять по прошествии некоторого времени, то, что когда-то было очевидным. Пример не самый очевидный для новичков.
Значение selected в HTML можно устанавливать так:

<select name="category">
    <option selected value="1">Салаты</option>
    <option value="2">Овощи</option>
    <option value="3">Фрукты</option>
</select>

только добавив selected в нужной строке, то есть просто.
Организовать в laravel это можно так.
В контроллере я передаю 1)коллекцию для списка select и 2)ключ для установления самого значения selected:

 public function add()
 {
 //выбираю коллекцию
 $vegetables = Vegetable::all();
 
 //и значение для выборки selected
 $flag = 1;
 //передаю это в view c именем add.blade.php 
 return view('add')->with(['vegetables' => $vegetables,'flag' => $flag]);
 }

В самом add.blade.php значение selected устаналиваю так:

...
<select name="category">
//заполняю Select значениями из коллекции
@foreach ($vegetables as $vegetable)
<option value="{{$vegetable->id}}" 
//если условие выполняется ставлю selected  
@if ($vegetable->id === $flag)
selected
@endif
>{{$vegetable->title}}</option>
@endforeach
</select>
...

Вам понравиться

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *