2015-09-30 2 views
1

Как я могу написать править поля ввода, как показано ниже:Как проверить поле Input Array в Laravel 5.1?

{!! Form::number("amount[]",null,['min' => 0, 'class' => 'form-control col-xs-2 ']) !!} 

Я попытался после чего дал ошибку: htmlentities() expects parameter 1 to be string, array given

 $rules = array(
      'amount[]' => 'required' 
     ); 
     $this->validate($request, $rules); 

Update:

Я попробовал это, как предложено пользователем, он не перенаправляет его снова на страницу. Ниже метод контроллера:

public function postEstimate(Request $request) { 
     $rules = array(
      'amount' => 'required|array' 
     ); 

     $this->validate($request, $rules); 
    } 
+0

Вы получаете эту ошибку, потому что считают 'количества []' как массив, наклоняет вы называете поле 'amount'? – Gal

+0

@Gal, если вы имели в виду в 'rules', то да, я уже установил его как' amount', но он не поймал его вообще. – Volatil3

+2

Я имел в виду как формы, так и правила, если вы не хотите изменять это, вы можете называть его как 'amount.0' внутри правил (в случае, если это ваша первая сумма []), но я не понимаю, почему вы хочу сделать это вот так. – Gal

ответ

0

, если вы ожидаете amount как массив правила должны быть

$rules = array(
    'amount' => 'required|array' 
); 

проверка не doc

Если вы не перенаправлять или получить ошибку проверки означает, что нет ошибка проверки

только dd($request->input('amount')) в контроллере и проверьте его array или нет i f это массив, после которого будут проходить проверки.

+0

Это не проверяет его вообще. – Volatil3

+0

Проверьте мой обновленный вопрос. – Volatil3

+0

Я обновил свой ответ, пожалуйста, посмотрите. –

1

Вместо этого попробуйте это:

private $rules = array(
      'amount' => 'required|array', 
     ); 

public function postEstimate(Request $request) { 


     $this->validate($request, $this->rules); 
    } 

или попробовать проверки с 'amount' => 'required

Я не уверен, об этом 'amount' => 'required|array

+0

Используя 'amount', он не обнаруживает поля вообще. Правило 'array', введенное в Laravel 5.1 – Volatil3

3

Я думаю, вы получили вопросы, с тем, что я объяснил, так это то, что Я имел в виду -

$rules = []; 
$count_amounts = count($request->input('amount')); 
foreach (range(0, $count_amounts) as $number) { 
    $rules['amount.' . $number] = 'required|integer|min:0'; 
} 

Th это должно проверить, что каждый amount входа у вас есть целое число, больше чем 0 (как вы определили в валидации HTML)

1

Для реализации пользовательских правил проверки значения целого типа массива

во-первых открыта следующий файл

/resources/lang/en/validation.php 

Затем добавить пользовательское сообщение

'numericarray'   => 'The :attribute must be numeric array value.', 
'requiredarray'  => 'The :attribute must required all element.', 

Снова открыть другой файл

/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; 
    }); 

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

} 

Теперь вы можете использовать requiredarray для всех элементов, необходимых массива. А также использовать numericarray для проверки значения целого типа массива

$this->validate($request, [ 
      'field_name1' => 'requiredarray', 
      'field_name2' => 'numericarray' 
     ]); 
Смежные вопросы