Laravel:验证数组字段是否具有相同的大小

Laravel:验证数组字段是否具有相同的大小,laravel,validation,Laravel,Validation,我有一个表格,将接受多个图片上传。表单字段是img(图像文件本身)、img\u alt,以及img\u字幕。我需要确保图像的数量等于标题的数量和alt(img HTML属性)的数量。例如,我不想有7个标题和3个图像 在Laravel中是否有内置的方法来实现这一点 我知道我可以创建自定义验证,我现在正在这样做。然而,我想知道这个验证是否已经在拉威尔准备好了。找不到它 也许还有另一种解决方案,不是使用Laravel,而是使用HTML。我想我已经读过一些关于创建一个字段数组images[],它的每个元

我有一个表格,将接受多个图片上传。表单字段是
img
(图像文件本身)、
img\u alt
,以及
img\u字幕
。我需要确保图像的数量等于标题的数量和
alt
(img HTML属性)的数量。例如,我不想有7个标题和3个图像

在Laravel中是否有内置的方法来实现这一点

我知道我可以创建自定义验证,我现在正在这样做。然而,我想知道这个验证是否已经在拉威尔准备好了。找不到它


也许还有另一种解决方案,不是使用Laravel,而是使用HTML。我想我已经读过一些关于创建一个字段数组
images[]
,它的每个元素实际上是另外3个字段,比如
images.alt
images.caption
images.file
,它可以在PHP中通过
images[0]['alt']
images[1]['alt']
,访问,等等。我不确定这是否可行,如果可行,有人能告诉我如何实现吗?

您需要的是以下语法:

<input type="text" name="images[0][caption]" />
<input type="text" name="images[0][alt]" />
<input type="file" name="images[0][filename]" />

<input type="text" name="images[1][caption]" />
<input type="text" name="images[1][alt]" />
<input type="file" name="images[1][filename]" />
为了验证输入,您需要以下验证规则:

$rules = [
    'images' => 'required|array',
    'images.*.caption' => 'required|string|min:10',
    'images.*.alt' => 'nullable|string|min:3',
    'images.*.filename' => 'required|file|mimes:jpeg,png,bmp,webp'
];

显然,这些只是示例,可能需要根据您的具体需求进行定制。这些规则隐含地要求数组包含对象。如果您需要始终填写所有三个字段,只需简单地要求它们。

正是我所需要的!非常感谢你!!事实上,这是行不通的。如果我尝试提交两个图像,然后
var\u dump($request->all())
,那么数组
img
将有6个元素,这6个元素是数组。这里是我从
var\u dump
中得到的信息:
[“img”]=>数组(6){[0]=>数组(1){[“alt”=>字符串(2)“1a”}[1]=>数组(1){[“caption”]=>字符串(2)“1a”}[2]=>数组(1){[“file”]=>NULL}[4]=>数组(1){[“alt=>字符串(2)”2a”}[5]=>数组(1){“caption”=>字符串(2)“2a”=>NULL”=>
。如果您能再次帮助我,我将不胜感激!嗯,是的,这很有道理。您可能需要在第一个数组中使用索引,如0、1、2……我更新了关于HTML部分的答案。您只需要一个数字索引就可以对元素进行分组。
$rules = [
    'images' => 'required|array',
    'images.*.caption' => 'required|string|min:10',
    'images.*.alt' => 'nullable|string|min:3',
    'images.*.filename' => 'required|file|mimes:jpeg,png,bmp,webp'
];