Laravel 按组请求验证

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

所以,我有一个 Creators 表,其中包含与创建者相关的所有信息。
该表有一些可为空的列,可以根据您的创建者类型来填充这些列。
作为示例,一个人可以是“独立”创建者或“公司”创建者。在第二种情况下,创建者必须填写与其公司相关的栏目。 目前我正在控制器内用类似这样的东西来安排它:

    public function isValid(Request $request)
    {
        $creator = //creator validation rules;
        $company = //company validation rules;
        $transfer = //another set of rules;
        if (!$request->indipendent)
            $creator = array_merge($creator, $company);
        $creator = array_merge($creator, $transfer);
        return $request->validate($creator);
    }

但是我想创建一个新的 CreatorRequest 来验证请求。
我能想到的唯一方法是重写

validate()
函数,但是有没有办法仅利用
rules()
函数来做到这一点?
理想情况下,我希望在规则中包含
$creator $company
$transfer
,并能够选择我想要验证的组。
例如:

$request->validate(['creator', 'company']); //doesn't validate transfer

最好的方法是什么?

php laravel validation request
1个回答
0
投票

我说这里最好的方法是将您的请求分解为三个单独的请求类,并使用 laravel 容器注入它们:

public function isValid(CreateCreatorRequest $creator, CreateCompanyRequest $company, TransferRequest $transfer)
{
    if (!$request->indipendent)
        $creator = array_merge($creator, $company);
    $creator = array_merge($creator, $transfer);
    return $request->validate($creator);
}

Laravel 将自动处理将当前请求传递到这些请求类中,并且您将以数组形式获取经过验证的数据。这里方便的优点是您可以强制接口直接针对预期的操作 - 您可以在不同的控制器操作中应用相同的

CreateCompanyRequest
,并为所有验证规则提供一个中心位置。

https://laravel.com/docs/9.x/validation#creating-form-requests

© www.soinside.com 2019 - 2024. All rights reserved.