Laravel 11 验证要求数组中的单个项目必须是以下之一

问题描述 投票:0回答:1

我正在使用表单请求验证并允许在表单中创建车辆。每辆车都有一个引用,可以是 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。

php laravel validation request
1个回答
0
投票

我使用了 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,
],
© www.soinside.com 2019 - 2024. All rights reserved.