Какова наилучшая практика показать старую ценность при редактировании формы в Laravel?

Я пишу логику для формы редактирования и у меня есть некоторые сложности при отображении данных на входах.

Когда я первоначально показываю форму, я показываю значения записей как:

value="{{$dog->title}}"

Затем, когда форма не проходит проверку, мне нужно показать старый ввод, чтобы пользователь не потерял то, что уже ввел. Поэтому мне нужен способ отображения старых данных, таких как:

value="{{old('title')}}"

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

value="{{$dog->title or old('title')}}"

И в контроллере я проверяю, имеет ли запрос старый ввод, я присваиваю $ dog var нулевое значение.

Я хотел спросить, считается ли это нормальной практикой или есть лучший и "правильный" способ сделать это?

Ответ 1

Функция old имеет параметр по умолчанию, если старые данные не найдены в сеансе.

function old($key = null, $default = null)

Вы можете заменить выражение в шаблоне

value="{{old('title', $dog->title)}}"

Ответ 2

Я знаю, что на этот вопрос уже дан ответ, но я подумал, что в будущем оставлю здесь небольшой фрагмент для других.

Установив старое значение на входе как @ikurcubic отправленный, можно использовать тот же самый способ на переключателе или выбрать:

<input type="text" name="name" value="{{ old('name', $DB->default-value) }}" />

Выберите вариант:

<option value="Jeff" {{ old('name', $DB->default-value) == 'Jeff' ? selected : '' }}>Jeff</option>

Переключатель:

<input type="radio"  name="gender" value="M" {{ old('name', $DB->default-value)== "M" ? 'checked' : '' }} />

Еще один способ сделать это: написать небольшой if, чтобы определить, какое значение следует оценивать.

@php                                  
if(old('name') !== null){
    $option = old('name'); 
}
else{ $option = $database->value; }
@endphp

<select name="name">
   <option value="Bob" {{ $option == 'Bob' ? selected : '' }}>Bob</option>
   <option value="Jeff" {{ $option == 'Jeff' ? selected : '' }}>Jeff</option>
</select>


<input type="radio"  name="gender" value="M" {{ $option == "M" ? 'checked' : '' }} />

<input type="radio"  name="gender" value="F" {{ $option == "F" ? 'checked' : '' }} />

Установка старого значения ввода с именем массива, например, name = "name []":

<input type="text" name="name[]" value="{{ old('name.0) }}" />

Это даст вам старое значение ввода с индексом 0

Я проверил это, и это работает, я надеюсь, что это кому-то поможет.

Ответ 3

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

Я бы предложил использовать Larvel Collective Form и HTML-пакеты для создания вашей формы. Этот пакет автоматически обрабатывает привязку старых значений запроса к вашей форме, если проверка не выполняется.

https://laravelcollective.com/docs/5.2/html

Ответ 4

Я решил эту проблему в своем приложении если вы хотите получить старое предыдущее введенное значение во входных данных, попробуйте это Мне так понравилось.

function SaveData(Request $request)
{
       $sValidationRules = [
        'firstname' => 'required',
        'lastname' => 'required',
        'email' => 'required',
        'phone' => 'required',
      ];

      $validator = Validator::make($request->all(), $sValidationRules);

      if ($validator->fails()) // on validator found any error 
      {
        // pass validator object in withErrors method & also withInput it should be null by default
         return redirect('Your Route Hare')->withErrors($validator)->withInput();
      }


      Employee::create($request->all());

      return redirect(' your route hare ');
}

& амп; после этого получите старые данные в поле ввода, как это, используя {{Request :: old ('firstname')}} Удачного кодирования. :)

<input type="text" name="firstname" id="firstname"  value="{{ Request::old('firstname') }}" class="form-control" placeholder="First Name">