在 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 包来构建您的表格。如果验证失败,此包将自动处理将旧请求值绑定到您的表单
函数 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">
我正在编写编辑表单的逻辑,在输入中显示数据时遇到了一些问题。
当我最初显示表单时,我显示的记录值如下:
value="{{$dog->title}}"
然后当表单没有通过验证时,我需要显示旧的输入,这样用户就不会丢失他已经输入的内容。所以我需要有一种方法来显示旧数据,例如:
value="{{old('title')}}"
因为我需要输入旧数据以防它存在,所以我得到了这个代码:
value="{{$dog->title or old('title')}}"
然后在控制器中我检查 Request 是否有旧输入,我为 $dog 变量分配了一个空值。
我想问一下这是否被认为是一种可行的做法,或者是否有更好的 'correct' 方法来做到这一点?
您做事的方式没有任何问题,因为 Laravel 提供了多种方法来处理您所描述的情况。
我建议使用 Laravel 集体表格和 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">