在 Laravel 中编辑表单时显示旧值的最佳做法是什么?

What is the best practice to show old value when editing a form in Laravel?

我正在编写编辑表单的逻辑,在输入中显示数据时遇到了一些问题。

当我最初显示表单时,我显示的记录值如下:

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

然后当表单没有通过验证时,我需要显示旧的输入,这样用户就不会丢失他已经输入的内容。所以我需要有一种方法来显示旧数据,例如:

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

因为我需要输入旧数据以防它存在,所以我得到了这个代码:

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

然后在控制器中我检查 Request 是否有旧输入,我为 $dog 变量分配了一个空值。

我想问一下这是否被认为是一种可行的做法,或者是否有更好的 'correct' 方法来做到这一点?

您做事的方式没有任何问题,因为 Laravel 提供了多种方法来处理您所描述的情况。

我建议使用 Laravel 集体表格和 HTML 包来构建您的表格。如果验证失败,此包将自动处理将旧请求值绑定到您的表单

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

函数 old 如果在会话中没有找到旧数据,则有 default 参数。

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

您可以将模板中的表达式替换为

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

我知道这个问题已经得到解答,但我想以后我会在这里为其他人留下一些片段。

在@ikurcubic 发布的输入上设置旧值可以在单选按钮或 select:

上以相同的方式使用
<input type="text" name="name" value="{{ old('name', $DB->default-value) }}" />

Select 选项:

<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 的输入的旧值。

我已经测试过了并且有效。

我在我的申请中解决了这个问题 如果你想在输入中获得以前插入的旧值,你应该试试这个 我确实喜欢这个。

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">

另一种方法是从 dog class 获取数据,如下所示:

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

为什么?因为 old() 是为了验证;当您验证失败时,输入将在该字段中保持可用。在尚未触发验证的情况下,value 将填充为 $dog->title.

旧数据:输入类型text | phone | 数量 | ...

 <input type="text" name="my_text" value="{{old('my_text')}}">

旧数据:输入类型复选框 | 收音机

 <input type="checkbox" {{ old('my_checkbox') == 'on' ? 'checked' : '' }} name="my_checkbox">