
本文档介绍了如何在 Laravel 中验证嵌套的 JSON 对象,并演示了如何将当前数组索引的对象传递到自定义验证器中。通过动态构建验证规则,可以灵活地处理嵌套数据结构的验证需求,确保数据的完整性和准确性。
在 Laravel 中,验证嵌套的 JSON 对象通常需要根据数据的结构动态地定义验证规则。当自定义验证器需要访问当前数组索引下的其他字段时,直接在 rules() 方法中静态定义规则可能无法满足需求。本文将介绍一种通过动态构建验证规则的方式,将所需的数据传递给自定义验证器。
动态构建验证规则
核心思想是在 rules() 方法中,首先获取请求中的 seats 数组,然后遍历该数组,为每个元素动态地生成验证规则。
以下是一个示例,展示了如何在 CheckoutRequest 中实现此功能:
<?php
namespace App\Http\Requests\App;
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;
}
}代码解释
Easily find JSON paths within JSON objects using our intuitive Json Path Finder
30
自定义验证器
SeatIsAvailable 自定义验证器现在可以接收 $seat 对象,并访问其 schedule_id 和 date 属性,以便进行更复杂的验证。
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class SeatIsAvailable implements Rule
{
protected $seatData;
public function __construct($seatData)
{
$this->seatData = $seatData;
}
public function passes($attribute, $value)
{
// 使用 $this->seatData->schedule_id 和 $this->seatData->date 进行验证逻辑
// 例如,检查座位是否在指定的日期和时间段内可用
// 实际验证逻辑需要根据具体需求实现
return true; // 替换为实际的验证结果
}
public function message()
{
return 'The seat is not available.';
}
}注意事项
总结
通过动态构建验证规则,可以灵活地处理嵌套的 JSON 对象,并将相关数据传递给自定义验证器。这种方法适用于需要根据数据的上下文进行验证的场景,提高了验证的灵活性和可维护性。
以上就是使用 Laravel 验证嵌套 JSON 对象并传递参数到自定义验证器的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号