Как проверить массив целых чисел в 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;
}