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

nan*_*eri 19 validation laravel laravel-blade

我正在为编辑表单编写逻辑,并且在输入中显示数据时会有一些复杂性.

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

value="{{$dog->title}}"
Run Code Online (Sandbox Code Playgroud)

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

value="{{old('title')}}"
Run Code Online (Sandbox Code Playgroud)

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

value="{{$dog->title or old('title')}}"
Run Code Online (Sandbox Code Playgroud)

在控制器中我检查Request是否有旧输入,我将$ dog var指定为null值.

我想问一下这是否是一种好的做法,还是有更好的"正确"方法呢?

iku*_*bic 58

如果在会话中找不到旧数据,则函数old具有默认参数.

function old($key = null, $default = null)
Run Code Online (Sandbox Code Playgroud)

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

value="{{old('title', $dog->title)}}"
Run Code Online (Sandbox Code Playgroud)

  • 有时,当您访问嵌套属性时,如果该属性不存在,则会抛出错误以跳过我执行类似 `old('manager_id', $department->manager->id ?? '')` 的操作 (2认同)

Jel*_*ean 17

我知道这已经得到了回答,但我想我将来会在这里为其他人留下一些片段。

在输入上设置旧值作为@ikurcubic 发布可以在单选按钮或选择上以相同的方式使用:

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

选择选项:

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

单选按钮:

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

另一种方法;写一个小的 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' : '' }} />
Run Code Online (Sandbox Code Playgroud)

使用数组名称设置输入的旧值,例如 name="name[]":

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

这将为您提供索引为 0 的输入的旧值。

我已经测试过这个并且它有效。


小智 5

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

value="{{old('title') ?? $dog->title }}"
Run Code Online (Sandbox Code Playgroud)

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