#laravel
#laravel
Вопрос:
Я застрял на 2 дня, вы знаете, как отобразить старые данные выбранного элемента в Laravel?
<select name="sexe" id="sexe" class="form-control">
<option value="">Choice</option>
<option>Women</option>
<option>Man</option>
</select>
Я пробовал это, но безуспешно:
<select class="form-control" name="sexe">
<option value="male" @if (old('sexe') == 'male') selected="selected" @endif>male</option>
<option value="female" @if (old('sexe') == 'female') selected="selected" @endif>female</option>
</select>
Мой контроллер
public function edit($id)
{
//
$candidats = Candidat::find($id);
$permis = Permis::all();
return view('admin.candidats.edit', compact('candidats', 'permis'));
}
public function update(Request $request, $id)
{
$request->validate([
'sexe' => 'required|string',
'fk_permis' => 'required'
]);
$candidats = Candidat::find($id);
$candidats->sexe = $request->get('sexe');
$candidats->fk_permis = $request->get('fk_permis');
$candidats->save();
return redirect()->route('candidats.index')
->with('success', 'mise à jour effectuée');
}
Редактировать:
1) index.blade.php
2) edit.blade.php
Ответ №1:
В вашей функции обновления поместите withInput()
:
return redirect()->route('candidats.index')
->with('success', 'mise à jour effectuée')->withInput();
В вашем select вы можете сделать это:
<select class="form-control" name="sexe">
<option value="male" @if (old('sexe') == 'male') selected="selected" @elseif($candidats->sexe == 'male') selected="selected"
@endif>male</option>
<option value="female" @if (old('sexe') == 'female') selected="selected" @elseif($candidats->sexe == 'female') selected="selected"
@endif>female</option>
</select>
Я загрузил выбранный вариант из вашей модели здесь
@elseif($candidats->sexe == 'male') selected="selected"
Итак, если вы сохранили ‘male’ в своем sexe
атрибуте, будет выбран этот параметр.
Взгляните сюда для получения дополнительной информации:
Комментарии:
1. У меня всегда одна и та же проблема. Элемент 1 всегда по умолчанию … 🙁
2. вы сохраняете правильный параметр в своей модели? убедитесь, что при нажатии на женскую опцию вы сохраняете женскую опцию в своей модели
3. Я отредактировал свое первое сообщение. (Есть 2 скриншота) В моем файле index.blade поле ‘sexe’ находится на ‘female’, когда я нажимаю на кнопку edit, в моем выпадающем списке отображается элемент ‘man’ вместо ‘female’ … 🙁
4. Вау!! Это работает, большое вам спасибо … 🙂 Вы лучшие… Где вы изучили Laravel???
5. Добро пожаловать, друг. Я научился сам, я посмотрел несколько видео, но ни одно из них не было хорошим. Что я делаю, так это много практикую, читаю документацию и помогаю людям, когда могу 🙂
Ответ №2:
Если старые данные были сохранены в виде модели, что я предполагаю, поскольку это вопрос Laravel, а не javascript, вы можете использовать привязку form-model, чтобы легко загрузить старые данные при следующем переходе на страницу.
Итак, когда вы открываете свою форму, привяжите модель:
{{ Form::model($yourModel, array('route' => array('yourModel.update', $yourModel->id))) }}
И затем в рамках метода select laravel (коллективный) может автоматически присвоить старым данным выбранное значение. С помощью помощника Laravel это может выглядеть следующим образом:
{!! Form::select('sexe', $listOfYourNameAndIdForYourSelectItem, null, ['class'=>'form-control', 'id'=>'sexe']) !!}
Вводя третий аргумент null
, как указано выше, Laravel сделает старые данные модели выбранным элементом.
Проверьте документы в пакете Laravel forms для получения дополнительной информации.
Комментарии:
1. Спасибо за вашу помощь. Вы думаете, моя проблема в моем контроллере? Я отредактировал свое первое сообщение…
2. Зависит от того, как вы настроили форму. Если вы хотите воспользоваться преимуществами простой привязки Laravel, как указано выше, передайте
$candidats
модель в представление (возможно, новую при создании (если хотите) и сохраненную при обновлении, используя привязку при обновлении), и это автоматически сделает выбранный элемент «выбранным», используя формат в моем ответе.