Laravel 8.65 验证错误消息和旧值未显示在 Blade 文件中

msa*_*i76 5 php laravel laravel-validation laravel-formrequest laravel-8

我正在使用 FormRequest 来验证数据。我知道这个问题被问了很多次,社区尝试了很多方法来解决这个问题,但没有一个能解决我的问题。附有参考链接。

我的问题描述

我的表单很复杂,其中一些 HTML 是从我的 JQuery 代码生成的。当 Jquery 代码未填充到表单上时,后端验证和旧值工作正常,但当 JQuery HTML 出现在表单中并提交表单时,旧值和验证错误不起作用。附有图像以进行更多说明。

第1步点击付款条件 步骤1

第2步选择条款并确认 第2步

步骤 3在付款百分比输入字段中添加从 JQuery 填充的值。 步骤3

表单请求

class AbcRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'payment_term' => ['required'],
            'payment_percent' => ['required'],
            'other_info' => ['required'],
        ];
    }
}
Run Code Online (Sandbox Code Playgroud)

网页.php

Route::group(['middleware' => ['auth', 'approved']], function () {
    Route::post('/abc/store', 'AbcController@store')
        ->name('abc.store');
});
Run Code Online (Sandbox Code Playgroud)

刀刃

<form method="post" action="{{ url('/abc/store') }}" 
      enctype="multipart/form-data">
    @csrf
    <input type="text" name="payment_term" class="form-control" 
           value="{{ old('payment_term') }}">
    @error('payment_term')
    <div class="backend-error"> {{ $message }} </div>
    @enderror
</form>
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的

社区链接

  1. Laravel 验证 MessageBag 包含错误,但未显示在刀片​​文件中
  2. Laravel 5 验证错误消息未显示
  3. Laravel 8 - 旧输入和验证错误消息不起作用
  4. https://github.com/laravel/framework/issues/26367
  5. https://laravel.io/forum/why-laravel-validation-dont-displaying-errors
  6. https://laracasts.com/discuss/channels/laravel/error-messages-are-not-shown-after-validation
  7. Laravel 5.2 验证错误未出现

社区建议的控制器代码

public function store(Request $request)
{
    $validator = Validator::make($request->all(), [
        'payment_term' => ['required'],
        'payment_percent' => ['required'],
        'other_info' => ['required'],
    ]);
    
    if ($validator->fails()):
        return redirect()->back()
            ->withErrors($validator)
            ->withInput();
    endif;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*tin 0

免责声明:如果我没有正确理解你的问题,我很抱歉,尽我所能。

如果您在客户端使用 jQuery 创建一些 HTML 输入,Laravel 将无法将任何旧的输入值或验证错误插入到您的 HTML 中,因为您引用的 DOM 元素在渲染时根本不存在在您的网络服务器上。

本质上,我可以想到两种方法来解决这个问题:让 Laravel 渲染这些 HTML 元素并使用 CSS 隐藏它们。然后,您的 JavaScript 可能(有条件地?)通过操作 CSS 显示之前隐藏的元素。另一种选择是将旧输入值和验证错误模板化到 jQuery 代码可以解析的内联脚本标记内的 JavaScript 变量中,例如通过在 JSON 中对这些值进行编码和解码。