Как установить значение 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> ... |