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