是否有 Laravel 验证规则来检查字段是否为标量
Is there a Laravel validation rule that checks if a field is scalar
我正在使用 Laravel 的验证器来验证控制器内的 JSON 请求:
class InsertProduct extends ModuleApiController
{
public function handle(Request $request, int $fileId)
{
$data = $request->json()->all();
$validator = Validator::make($data, [
'products' => ['required', new ArrayWithType('seq', 'The :field field must be an array')],
'products.*' => ['required', new ArrayWithType('assoc', 'The :field field must be an object')],
'products.*.code' => 'required|alpha_num',
'products.*.variants' => ['required', new ArrayWithType('seq', 'The :field field must be an array')],
'products.*.variants.*' => ['required', new ArrayWithType('assoc', 'The :field field must be an object')],
'products.*.variants.*.barcode' => 'required|alpha_num',
]);
products.*.code
字段和 products.*.variants.*.barcode
字段可以是这样的:
20032199231
"AB3123-X"
"Z22.327p"
"001230572"
"Houston22"
我似乎无法找到一条规则来接受所有这些潜在值,但拒绝数组或对象(关联数组一旦 Laravel 解析 JSON)值。
我尝试过的事情:
Rule | Issue
----------------------|--------------------------------------------------------------------
'required' | Will validate JSON objects and arrays
'required|string' | Won't validate integer values like the first one above
'required|alpha_num' | Won't validate the middle three values above
'required|alpha_dash' | Won't validate values that contain periods (.) like the third one
我需要的是:'required|not_array'
或 'required|scalar'
但我无法在文档中找到类似的内容。
我真的必须为此编写自定义验证规则吗?
没有这样的 built-in 验证规则。您需要创建自定义验证规则(参见 docs). Use regex
rule (see docs)才能实现它。
你尝试过这样的事情吗?使用 is_scalar
$validator = Validator::make($request->all(), [
'products.*.code' => [
'required',
function ($attribute, $value, $fail) {
if (!is_scalar($value)) {
$fail($attribute.' isnt a scalar.');
}
},
],
]);
或者,如果您想注册自定义验证:
public function boot()
{
Validator::extend('is_scalar', function ($attribute, $value, $parameters, $validator) {
return !is_scalar($value);
});
}
然后:
$validator = Validator::make($request->all(), [
'products.*.code' => [
'required',
'is_scalar'
],
]);
我正在使用 Laravel 的验证器来验证控制器内的 JSON 请求:
class InsertProduct extends ModuleApiController
{
public function handle(Request $request, int $fileId)
{
$data = $request->json()->all();
$validator = Validator::make($data, [
'products' => ['required', new ArrayWithType('seq', 'The :field field must be an array')],
'products.*' => ['required', new ArrayWithType('assoc', 'The :field field must be an object')],
'products.*.code' => 'required|alpha_num',
'products.*.variants' => ['required', new ArrayWithType('seq', 'The :field field must be an array')],
'products.*.variants.*' => ['required', new ArrayWithType('assoc', 'The :field field must be an object')],
'products.*.variants.*.barcode' => 'required|alpha_num',
]);
products.*.code
字段和 products.*.variants.*.barcode
字段可以是这样的:
20032199231
"AB3123-X"
"Z22.327p"
"001230572"
"Houston22"
我似乎无法找到一条规则来接受所有这些潜在值,但拒绝数组或对象(关联数组一旦 Laravel 解析 JSON)值。
我尝试过的事情:
Rule | Issue
----------------------|--------------------------------------------------------------------
'required' | Will validate JSON objects and arrays
'required|string' | Won't validate integer values like the first one above
'required|alpha_num' | Won't validate the middle three values above
'required|alpha_dash' | Won't validate values that contain periods (.) like the third one
我需要的是:'required|not_array'
或 'required|scalar'
但我无法在文档中找到类似的内容。
我真的必须为此编写自定义验证规则吗?
没有这样的 built-in 验证规则。您需要创建自定义验证规则(参见 docs). Use regex
rule (see docs)才能实现它。
你尝试过这样的事情吗?使用 is_scalar
$validator = Validator::make($request->all(), [
'products.*.code' => [
'required',
function ($attribute, $value, $fail) {
if (!is_scalar($value)) {
$fail($attribute.' isnt a scalar.');
}
},
],
]);
或者,如果您想注册自定义验证:
public function boot()
{
Validator::extend('is_scalar', function ($attribute, $value, $parameters, $validator) {
return !is_scalar($value);
});
}
然后:
$validator = Validator::make($request->all(), [
'products.*.code' => [
'required',
'is_scalar'
],
]);