繁体   English   中英

使用参数验证 Nest JSON

[英]Validating Nest JSON with Parameters

我正在尝试验证 Laravel 中的嵌套 JSON 对象。 我已经创建了一个自定义规则来执行此操作,但是我目前有一个问题,我希望能够将当前数组索引处的对象传递给我的自定义验证器:

<?php

namespace App\Http\Requests\App;

use App\Rules\CheckoutDepatureCheck;
use App\Rules\SeatIsAvailable;
use Illuminate\Foundation\Http\FormRequest;

class CheckoutRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            "company" => "required",
            "seats" => "required|array",
            "seats.*.seat_no" => ['required', new SeatIsAvailable()], // would like to pass seat.* to the constructor of my custom validator here
            "seats.*.schedule_id" => "required|numeric",
            "seats.*.date" => "required|date"
        ];
    }
}

关键是我的自定义验证器需要 schedule_id 和 data 以及 Seat_no 才能成功验证请求。

我如何在 Laravel 中做到这一点?

您可以根据座位数组输入的长度动态添加规则

<?php

namespace App\Http\Requests\App;

use App\Rules\CheckoutDepatureCheck;
use App\Rules\SeatIsAvailable;
use Illuminate\Foundation\Http\FormRequest;

class CheckoutRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        $rules = [
            'company' => 'required',
            'seats' => 'required|array',
        ];

        return array_merge($rules, $this->seatsRules());
    }

    private function seatsRules(): array
    {
        $rules = [];

        foreach ((array) $this->request->get('seats') as $key => $seat) {
            $rules["seats.$key.seat_no"] = ['required', new SeatIsAvailable($seat)];
            $rules["seats.$key.schedule_id"] = 'required|numeric';
            $rules["seats.$key.date"] = 'required|date';
        }

        return $rules;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM