如何对具有相同名称 Laravel 的任何单个字段应用验证?

How to apply validation on any single field having same name Laravel?

我有一个包含多语言功能的项目。所以我正在创建一个由多种语言组成的表单,如果用户需要,可以插入。 但是验证应该是这样的,如果任何具有相同名称的字段都包含值,那么剩下的就像 as

表格

<form>
   <input type="text" name="name[EN]" />
   <input type="text" name="name[AR]" />
   <input type="text" name="name[FR]" />
   <input type="submit" value="submit" />
</form>

现在我想验证如果这些字段中的任何一个具有值然后提交表单否则抛出验证

所以我尝试了 Laravels required_if,但是没有成功。

public function rules()
{
    return [
        'name.*'        => 'required_if:name,1',
    ];
}

那么如何在laravel

中进行这样的验证

我相信这应该可以解决问题:

$rules = [
    'name.EN' => 'required_without_all:name.AR,name.FR',
    'name.AR' => 'required_without_all:name.EN,name.FR',
    'name.FR' => 'required_without_all:name.EN,name.AR',
];

规则使该字段在其他字段为空的情况下成为必填项https://laravel.com/docs/5.6/validation#rule-required-without-all

我搜索过但找不到执行此操作的内置方法。您可以使用

创建自己的规则
php artisan make:rule NonEmptyFiltered

然后将规则定义为:

class NotEmptyFiltered implements Rule {
    public function passes($attribute, $value) {
        return !empty(array_filter($value));
    }

    public function message() {
        return ':attribute must have at least one non-null element';
    }
}

然后你可以这样做:

public function rules()
{
    return [
        'name' => [ new NonEmptyFiltered() ]
    ];
}