首页 > 解决方案 > 如何对具有相同名称 Laravel 的任何单个字段应用验证?

问题描述

我有一个包含多语言功能的项目。所以我正在创建一个包含多种语言的表单,如果用户需要,可以插入。但是验证应该像任何具有相同名称的字段包含值然后将其余字段保留为

形式

<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>

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

所以我尝试了 Laravel required_if,但没有奏效。

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

那么如何在 laravel 中进行这样的验证

标签: phplaravel-5laravel-5.6

解决方案


我已经搜索过,但找不到这样做的内置方式。您可以使用创建自己的规则

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() ]
    ];
}

推荐阅读