我正在使用表单请求验证并允许在表单中创建车辆。每辆车都有一个引用,可以是 A、B、C 或 D。但是,在每个表单请求中必须始终有一个引用:“A”。其他的数量可以任意。
我无法控制表格。请求通过 API 发出。
我的规则数组当前包含:
'form.vehicles' => 'required',
'form.vehicles.*.ref' => 'required|in:A,B,C,D
目前我正在使用以下代码:
if (! in_array('A', $this->input('form.vehicles.*.ref'))) {
throw new HttpResponseException(response()->json(['MessageString' => 'Vehicle ref A is required'], 422));
但这意味着由于其他验证问题,无法在响应中发送 messageBag。
我使用了 Tim Lewis 的建议,创建一个实现 ValidationRule 的自定义规则:
namespace App\Rules;
use Illuminate\Contracts\Validation\ValidationRule;
class VehicleA implements ValidationRule
{
/**
* Run the validation rule.
*
* @param \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString $fail
*/
public function validate(string $attribute, mixed $value, Closure $fail): void
{
$requiredVehicle = collect($value)->first(function ($vehicle) {
return $vehicle['ref'] === 'A';
});
if ($requiredVehicle === null) {
$fail('Vehicle A is required');
}
}
在我的表格请求中:
'form.vehicles' => [
'required',
new VehicleA,
],