Как добавить пустую опцию по умолчанию в поле ввода выбора с помощью laravelcollective?

У меня есть форма, в которой пользователь может при желании выбрать вариант, и если пользователь не выберет вариант, мне нужно, чтобы в базу данных было отправлено значение по умолчанию «null». Я использую laravel 5.1, поэтому мое поле ввода выглядит следующим образом:

           <div class="form-group col-lg-4">
                {!! Form::label('cat1', 'CAT Tool 1', ['class' => 'control-label']) !!}
                <div class="input-group">
                    <div class="input-group-addon">
                        <span class="glyphicon glyphicon-cog"></span>
                    </div>
                    {!! Form::select('cat1', $cats , null , ['class' => 'form-control']) !!}
                </div>
            </div>

Здесь массив $cats - это массив CAT Tools ($cats=['SDL Trados', 'Deja Vu', 'WordFast', 'OmegaT', 'Fluency'];). У меня есть похожие поля, в которых возвращается массив атрибутов базы данных (например, в методе создания контроллера у меня есть $languages=Language::lists('fa_name', 'id');). Как я могу этого добиться?


person Ali Erfani    schedule 01.09.2015    source источник
comment
Покажите php-код, который вы используете для вставки этих данных в базу данных.   -  person Arthur Samarcos    schedule 01.09.2015
comment
@ arthur-samarcos Нужно ли показывать php-код? Я все еще работаю над самой формой!   -  person Ali Erfani    schedule 01.09.2015


Ответы (2)


Я не знаю, будет ли он отправлен как null. Если вы поместите туда пустую строку, она просто вернется как пустая строка, поэтому вам нужно будет проверить, что это empty, и если это так, установите для него значение null.

Чтобы добавить его в массив, просто добавьте его в начало, и он должен работать.

$cats = ['', 'SDL Trados', 'Deja Vu', 'WordFast', 'OmegaT', 'Fluency'];

Или, если у вас уже есть переменная $cats и вам нужно ее изменить ...

array_unshift($cats, '');

Возможно, вам придется вводить эти массивы в ключ, потому что я считаю, что выбор будет устанавливать ключи как текст, а значения как значения в элементах option.

В этом случае вы все равно захотите использовать array_unshift и передать массив вместо строки.

array_unshift($languages, ['Optional' => '']);`

Это добавит дополнительную опцию к выбору с тестом Optional и без значения.

person user1669496    schedule 01.09.2015
comment
Спасибо. Что, если этот массив возвращается из таблицы базы данных? - person Ali Erfani; 01.09.2015
comment
Вместо get() вы хотите использовать lists(value, key), который вернет массив в соответствующем формате для использования в ваших полях выбора, где значение - это имя столбца базы данных, в котором хранятся значения (возможно, идентификатор), а ключ будет столбцом, который вы ' d взять текст опции, такой как имя или описание. Например lists('id', 'name') - person user1669496; 01.09.2015
comment
Как вы можете видеть в отредактированной версии моего вопроса, я делаю то же самое - person Ali Erfani; 01.09.2015
comment
Я изменил свой ответ - person user1669496; 01.09.2015
comment
Извините, но на самом деле $ languages ​​- это коллекция, а не массив, а array_unshift нужен массив! - person Ali Erfani; 01.09.2015

listsmethod используется для возврата массива, но начиная с Laravel 5.1 он возвращает коллекцию, поэтому мне нужно было преобразовать $ languages ​​в такой массив:

$languages=Language::lists('fa_name', 'id')->all();

or

$languages=Language::lists('fa_name', 'id')->toArray();

Далее в представлении я могу использовать следующее:

  {!! Form::select('from1', [null => 'Select your language'] + $languages, null , ['class' => 'form-control']) !!}

который добавит пустую опцию в поле выбора.

person Ali Erfani    schedule 01.09.2015