如何验证数组是否为空?

时间:2015-04-22 10:55:23

标签: php arrays laravel laravel-5

我有一个包含5个多选下拉列表的表单。提交时,我正在尝试运行一些验证,以检查是否已检查至少一个项目。

我控制器中的代码;

$input = Request::except('postcode_id'); //all user input from the form

$validator = \Validator::make(
    [
        $input => 'required'
    ]
);

if ($validator->fails())
{
    print "failed";
}else{
    print "passed";
}

我得到的错误是; Illegal offset type。我想我可能需要做一个自定义验证器,但是如果有更简单的方法,我想先检查一下。

2 个答案:

答案 0 :(得分:2)

Validator::make()的第一个参数是数据,第二个是验证规则数组,它们由输入名称索引。您可以使用required_without_all来验证至少必须存在一个,但它有点冗长:

$validator = \Validator::make($input, [
    'dropdown_1' => 'required_without_all:dropdown_2,dropdown_3,dropdown_4,dropdown_5'
    'dropdown_2' => 'required_without_all:dropdown_1,dropdown_3,dropdown_4,dropdown_5'
    'dropdown_3' => 'required_without_all:dropdown_1,dropdown_2,dropdown_4,dropdown_5'
    'dropdown_4' => 'required_without_all:dropdown_1,dropdown_2,dropdown_4,dropdown_5'
    'dropdown_5' => 'required_without_all:dropdown_1,dropdown_2,dropdown_3,dropdown_4'
]);

或者编写一些代码来生成$rules数组:

$fields = ['dropdown_1', 'dropdown_2', 'dropdown_3', 'dropdown_4', 'dropdown_5'];
$rules = [];
foreach ($fields as $i => $field) {
    $rules[$field] = 'required_without_all:' . implode(',', array_except($fields, $i));
}
$validator = \Validator::make($input, $rules);

答案 1 :(得分:0)

您需要在验证器中使用字符串,而不是变量。试试这个。

$validator = \Validator::make(
    [
        'input' => 'required'
    ]
);

自定义验证器本身并不太难。我一直在使用它进行数组输入验证。在Laravel 5请求中,我会做类似的事情

public function __construct() {
    Validator::extend("pcc", function($attribute, $value, $parameters) {
        $rules = [
            'container_id' => 'exists:containers,id'
        ];
        foreach ($value as $containerId) {
                $data = [
                    'container_id' => $containerId
                ];
                $validator = Validator::make($data, $rules);
                if ($validator->fails()) {
                    return false;
                }
            }
        return true;
    });
}

public function rules() {
    return [
        'containers' => 'required|pcc',
    ];
}