Как проверить массив целых чисел в Laravel

у меня есть массив целых чисел, как это $someVar = array(1,2,3,4,5). Мне нужно проверить $someVar чтобы убедиться, что каждый элемент является числовым.Как я могу это сделать?

Я знаю, что для случая одной значимой переменной правило проверки будет чем-то вроде этого $rules = array('someVar'=>'required|numeric'). Как я могу применить то же правило к каждому элементу массива $someVar?

большое спасибо за помощь.

7 ответов


Validator::extend('numericarray', function($attribute, $value, $parameters)
{
    foreach($value as $v) {
         if(!is_int($v)) return false;
    }
    return true;
});

использовать

$rules = array('someVar'=>'required|numericarray')

теперь laravel имеет возможность установить условие для элементов массива. Нет необходимости писать свой собственный валидатор для простых вещей, таких как validation int array. Используйте это (при использовании в контроллере) -

$validator = \Validator::make(compact('someVar'), [
    'someVar' => 'required|array',
    'someVar.*' => 'integer'
]);
$this->validateWith($validator);

или

$this->validate($request, [
    'someVar' => 'array',
    'someVar.*' => 'int'
]);

в Laravel 5 Вы можете проверить элементы в массиве, используя .*. Для вас это означало бы:

$rules = array('someVar'   => 'required|array',
               'someVar.*' => 'integer')

начните с добавления нового атрибута проверки

Validator::extend('numeric_array', function($attribute, $values, $parameters)
{
    if(! is_array($values)) {
        return false;
    }

    foreach($values as $v) {
        if(! is_numeric($v)) {
            return false;
        }
    }

    return true;
});

функция вернет false, если атрибут не является массивом или если значение не является числовым значением. Затем добавьте сообщение в " app/lang/en / validation.на PHP'

"numeric_array"        => "The :attribute field should be an array of numeric values",

вы можете добавить пользовательские правила для проверки значения целочисленного типа array

просто откройте файл

/resources/lang/en/validation.php

добавьте пользовательское сообщение перед сообщением "принято" в файл.

'numericarray'         => 'The :attribute must be numeric array value.',
"accepted"             => "The :attribute must be accepted.",

теперь откройте файл

/app/Providers/AppServiceProvider.php

а затем добавьте пользовательскую проверку в функцию загрузки.

public function boot()
{

    $this->app['validator']->extend('numericarray', function ($attribute, $value, $parameters)
    {
        foreach ($value as $v) {
            if (!is_int($v)) {
                return false;
            }
        }
        return true;
    });

}

теперь вы можете использовать numericarray для проверки значения целочисленного типа array

$this->validate($request, [
            'field_name1' => 'required',
            'field_name2' => 'numericarray'
        ]);

существует только проверка "массива", которая гарантирует, что значение является массивом, но для вашего конкретного случая вам придется создать пользовательский фильтр:

Laravel 3:http://three.laravel.com/docs/validation#custom-validation-rules

Laravel 4:http://laravel.com/docs/validation#custom-validation-rules


AppServiceProvider.в PHP

Validator::extend('integer_array', function($attribute, $value, $parameters)
{
    return Assert::isIntegerArray($value);
});

Assert.в PHP

/**
 * Checks wheter value is integer array or not
 * @param $value
 * @return bool
 */
public static function isIntegerArray($value){
    if(!is_array($value)){
        return false;
    }

    foreach($value as $element){
        if(!is_int($element)){
            return false;
        }
    }

    return true;
}