验证失败后,laravel显示旧post数据

验证失败后,laravel显示旧post数据,laravel,forms,validation,Laravel,Forms,Validation,我正在尝试更新一篇文章,为此我有一个带有以下标记的表单 服务名称 提交 最初,当表单打开时,它应该显示为{{$service->name}的模型值,一旦表单提交,如果验证失败,它必须显示旧的输入 问题是当输入为空时,逻辑{{old('name')?old('name'):$service->name} 计算结果为false,并显示$service->name,而不是空值 我的控制器代码 公共功能更新($id,Request$Request) { $validatedData=$request

我正在尝试更新一篇文章,为此我有一个带有以下标记的表单


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

问题是当输入为空时,逻辑
{{old('name')?old('name'):$service->name}
计算结果为false,并显示
$service->name
,而不是空值

我的控制器代码

公共功能更新($id,Request$Request)
{
$validatedData=$request->validate([
“名称”=>“必填项|最大值:255 |最小值:5”
]);
$service=service::find($id);
$service->name=$request->input('name');
$service->save();
返回重定向(admin_url('services'))->带有('message','Service updated successfully');
}

您需要使用
验证程序::make()
方法

$validator = Validator::make($request->all(), [
     'name' => 'required|min:2|max:255'
]);

if ($validator->fails()) {
    return Redirect::back()->withErrors($validator)->withInput();
} else {
    return redirect(admin_url('services'))->with('message', 'Service updated successfully');
}

Laravel包括一个中间件,用于将空字符串(如名称输入)转换为null,因此始终显示
$service->name

您可以在
App\Http\Kernel
中删除/注释该中间件,并在初始表单加载时仅显示
$service->name

protected$middleware=[
\App\Http\Middleware\TrustProxies::类,
\App\Http\Middleware\CheckFormIntenanceMode::class,
\Illumb\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
//下面这个
//\Illumb\Foundation\Http\Middleware\ConvertEmptyStringsToull::class,
];
然后在标记中



希望这有帮助

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

替换

{{ old('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>

服务名称
提交

尝试
{{old('name',$service->name)}}
当验证失败时,控制器中重定向回表单的语句是什么?请添加控制器代码。嗨,Digvijay,我已经添加了控制器代码,你能帮我吗out@user3209130你能试试
Validator::make()
方法吗,因为它有一个方法
失败()
@user3209130我的代码解决了你的问题吗?也不起作用,我认为,当对请求对象调用验证时,laravel会自动触发Redirect::back()->withErrors($validation)->withInput();基于上述@user3209130的逻辑是否不正常?检查发生的任何错误。
{{ 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>