首页 > 解决方案 > laravel 验证失败后显示旧的帖子数据

问题描述

我正在尝试更新帖子,为此我有以下标记的表格

<form method="post" action="{{ admin_url('services/'.$service->id) }}">
    <input name="_method" type="hidden" value="PATCH">

    <div class="form-group">
        <label for="name">Service Name</label>
        <input type="text" class="form-control" id="name" name="name"
            value="{{ old('name') ? old('name') : $service->name }}">
    </div>

    <button type="submit" class="btn btn-primary">Submit</button>
</form>

最初,当表单打开时,它应该显示模型值 {{$service->name}} 并且一旦提交表单并且如果验证失败,它必须显示旧输入

问题是当输入为空时,逻辑{{ old('name') ? old('name') : $service->name }} 评估为假并$service->name显示而不是空值。

我的控制器代码

public function update($id, Request $request)
{
    $validatedData = $request->validate([
        'name' => 'required|max:255|min:5'
    ]);
    $service = Service::find($id);
    $service->name = $request->input('name');
    $service->save();
    return redirect(admin_url('services'))->with('message', 'Service updated successfully');
}

标签: laravelformsvalidation

解决方案


如果会话中没有具有该名称的值,您可以将默认值传递给将使用的旧函数。

更换

{{ old('name') ? old('name') : $service->name }}

{{ old('name', $service->name) }}

应该能解决你的问题。


完整代码:

<form method="post" action="{{ admin_url('services/'.$service->id) }}">
    <input name="_method" type="hidden" value="PATCH">

    <div class="form-group">
        <label for="name">Service Name</label>
        <input type="text"
               class="form-control"
               id="name"
               name="name"
               value="{{ old('name', $service->name) }}">
    </div>

    <button type="submit" class="btn btn-primary">Submit</button>
</form>

推荐阅读