laravel - 使用参数验证 Nest JSON
问题描述
我正在尝试验证 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;
}
}
推荐阅读
- javascript - jQuery 事件处理程序是如何排队和执行的?
- javascript - 如何防止选择相同的选项值
- python - 正态分布的对数似然
- html - 在 CSS 中选择上一个兄弟姐妹 - 更新时间轴
- node.js - 使用 Node JS 从嵌套 JSON 中提取数据
- python - 在 USE_TZ=True 的条件下,如何在 IST 本身的 db 中显示存储在 IST 中的 DateTimeField?
- google-apps-script - 在 MS Word 中访问“命名范围”或“文档属性”
- python - 我应该在 setup.py 中使用元组或列表作为分类器吗?
- php - How to include UIkit from Bower Asset inside Yii2 AppAsset
- multithreading - foreach循环中的completablefuture runasync