Laravel 为具有相同名称但不同模型的表单字段添加验证规则

Laravel 为具有相同名称但不同模型的表单字段添加验证规则,laravel,forms,validation,Laravel,Forms,Validation,在我的Laravel7应用程序中,为了在表单中有更好的错误消息,我使用了自定义验证属性。例如,对于id字段,当表单字段中缺少提交时,它会显示所需的库存编号。现在的问题是,我的应用程序中有几种不同型号的表单,并且ofc不止一个id字段。还有一个id,它是员工编号或流程编号 但是在resources/lang/en/validation.php中,我看不到为不同的模型定义相同字段名的方法。我的想法是将字段重命名以进行错误检查,例如,id重命名为employee\u id,但随后不会出现错误消息 在我

在我的Laravel7应用程序中,为了在表单中有更好的错误消息,我使用了自定义验证属性。例如,对于
id
字段,当表单字段中缺少提交时,它会显示所需的
库存编号。现在的问题是,我的应用程序中有几种不同型号的表单,并且ofc不止一个
id
字段。还有一个
id
,它是员工编号或流程编号

但是在
resources/lang/en/validation.php中,我看不到为不同的模型定义相同字段名的方法。我的想法是将字段重命名以进行错误检查,例如,
id
重命名为
employee\u id
,但随后不会出现错误消息

在我看来:

<div class="form-group{{ $errors->has('id') ? ' ' : '' }}">
  <input class="form-control{{ $errors->has('id') ? ' is-invalid' : '' }}" name="id" type="text" value="{{ old('id', $process->id) }}" aria-required="true"/>
  @include('alerts.feedback', ['field' => 'employee_id'])  //not working
</div>

我认为问题在于,只接受模型数据库中实际存在的字段名。如何克服此问题?

您可以在验证请求时设置自定义消息,如下所示:

    public function store(Request $request)
{
    $request->validate([
        'id' => 'required',
        'employee_id' => 'required'
    ],
    [
        'id.required' => 'ID field is required',
        'employee_id.required' => 'Employee field is required'
    ]);
}

我刚刚找到了解决方案:定义自定义错误属性的一种比在
validation.php
中更好的方法是为模型()创建一个表单请求,并使用方法
function attributes()
。因此,与其他模型字段名称没有冲突,而且更清楚,因为属性是在模型的表单请求中设置的:

<?php
namespace App\Http\Requests;

use App\Employee;
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Http\FormRequest;

class EmployeeRequest extends FormRequest
{
(...)
  public function attributes()
  {
    return [
      'id' => 'Employee ID',
    ];
  }
}

这是在控制器中,对吗?它不适用于
@include('alerts.feedback',['field'=>'employee\u id'))
。我必须在视图中将什么设置为
employee\u id
,才能使其正常工作?我不确定这是否是一个好方法,因为
employee\u id
不是数据库中的真实字段,而是
id
。因此,我必须重新命名它,对吗?您可以尝试在视图中这样做:
@error('employee_id'){{$message}}@enderror
No,
@error('employee_id'){{$message}@enderror
不显示任何内容(但在另一个字段中为
title
工作)。这应该是使用自定义消息的好方法,要工作,重要的是,如果你有,你可以用你的控制器和视图编辑问题吗?
<?php
namespace App\Http\Requests;

use App\Employee;
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Http\FormRequest;

class EmployeeRequest extends FormRequest
{
(...)
  public function attributes()
  {
    return [
      'id' => 'Employee ID',
    ];
  }
}