Получение выбранных значений из формы множественного выбора в Laravel

для создания выпадающего списка с элементом, выбранным по умолчанию, выполняется следующее:

echo Form::select('size', array('L' => 'Large', 'M' => 'Medium', 'S' => 'Small'), 'S');

поэтому я создал раскрывающийся список, в котором по умолчанию выбрано несколько элементов, следующим образом:

echo Form::select('size', array('L' => 'Large', 'M' => 'Medium', 'S' => 'Small'), array('S', 'M'), array('multiple'));

но как получить несколько выбранных значений?

Input::get('size') возвращает только последнюю выбранную строку.

3 ответов


во-первых, если вы хотите иметь несколько пункт выбран по умолчанию, вы должны дать массив значений в качестве 3-го параметра, а не простое значение.

Exemple:

Form::select('size', array('L' => 'Large', 'M' => 'Medium', 'S' => 'Small'), array('S', 'M'), array('multiple'));

должен показывать выбор с выбранными S и M.

для второго пункта, вы должны попытаться дать имя, как size[] вместо size, это может быть решить проблему (потому что ваш опубликованный выбор не является простым значением, его массив значений)


обычные операторы Select go

<select name="select_name" id="select_name" multiple="multiple">

и рабочий процесс заключается в том, что Laravel получает элементы формы по их имени. Чтобы заставить его работать, измените имя на массив.

<select name="select_name[]" id="select_name" multiple="multiple">

это заставит laravel получить значения select в виде массива данных.


в соответствии с https://laravelcollective.com/docs/5.2/html#drop-down-lists

Form::select('size[]',['L' => 'Large', 'M' => 'Medium', 'S' => 'Small'], ['S', 'M'], ['multiple' => 'multiple', 'class' => 'form-control']);

Кстати, обратите внимание на имя выпадающего списка (размер[]) если вы хотите иметь возможность использовать это поле в качестве массива в вашем бэкэнде.

вещи становятся сложными, когда вы хотите использовать отношения в качестве значения, например

models
user =>  common fields
size => id, name, slug  [
                         {id : 1 , name : Large, slug : L}, 
                         {id : 2 , name : Small, slug : S},
                         {id : 3 , name : Medium, slug : M}
                         ] 

user_size => id, user_id, size_id  [
                                     {id :1, user_id:1, size_id:1}
                                     {id :2, user_id:1, size_id:3}
                                   ]   

так $user->colors возвращает что-то вроде

laravel collection

[
  USER_SIZE => [  'user_id' => 1 , size_id' => 1 ],
  USER_SIZE => [  'user_id' => 1, 'size_id' => 3 ]
]

вы могли бы сделать что-то подобное, помни!--5--> есть sizes связь один ко многим с SIZE Model

Form::select('size[]',['L' => 'Large', 'M' => 'Medium', 'S' => 'Small'], $user->sizes->pluck('size')->pluck('slug')->toArray(), ['multiple' => 'multiple', 'class' => 'form-control']);

надеюсь, это поможет