Laravel 如何在没有请求的情况下进行验证

How to validate without request in Laravel

我需要验证数组但没有请求。 在 laravel 文档验证中是这样描述的:

$validator = Validator::make($request->all(), [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
]);

但我不能使用 $request,因为数据来自外部 api 并且验证不在控制器内部。我如何验证这个数组?例如:

$validatedData = validate([
    'id' => 1,
    'body' => 'text'
], [
    'id' => 'required',
    'body' => 'required'
]);

应该是。因为 $request->all() 将所有输入数据保存为数组。

$input = [
    'title' => 'testTitle',
    'body' => 'text'
];


$input is your customs array.

$validator = Validator::make($input, [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
]);

您可以像这样创建请求对象来实现:

$request = new Request([
    'id' => 1,
    'body' => 'text'
]);

$this->validate($request, [
    'id' => 'required',
    'body' => 'required'
]);

因此您将获得请求的所有功能class

Validator::make 需要数组而不是请求对象。 您可以传递任何数组并在其上实施规则。

Validator::make(['name' => 'Tom'], ['name' => 'required', 'id' => 'required']);

并且它将验证数组。所以 $request 对象不是必需的。

您还可以将数据与请求对象合并:

$data = ['id' => 1];
$request->merge($data);

然后照常验证。

$request->all() 是数组而不是请求对象。 此代码将起作用:

$data = [
    'id' => 1,
    'body' => 'text'
];

$validator = Validator::make($data, [
    'id' => 'required',
    'body' => 'required',
]);