2015-01-15 2 views
1

У меня возникли проблемы, обертывая мою голову вокруг того, как проверить форму, которую я создал. Форма у меня выглядит примерно так:Проверка неизвестных полей ввода в Laravel

<input id="box-1-nickname" name="box-1-nickname" class="form-control" type="text" placeholder="Required"> 

<select id="box-1-destination" name="box-1-destination" class="form-control"> 
    <option value="store">Storage Facility</option> 
    <option value="ship">Ship</option> 
</select> 

<input class="box-height form-control" id="box-1-height" name="box-1-height" type="number" placeholder="in Inches"> 
<input class="box-width form-control" id="box-1-width" name="box-1-width" type="number" placeholder="in Inches"> 
<input class="box-depth form-control" id="box-1-depth" name="box-1-depth" type="number" placeholder="in Inches"> 
<input class="box-weight form-control" id="box-1-weight" name="box-1-weight" type="number" placeholder="in Pounds"> 

<label class="radio-inline"> 
    <input id="box-1-size-retail" name="box-1-size" type="radio" value="retail" checked> 
    Retail box (18" x 18" x 22") 
</label> 
<label class="radio-inline"> 
    <input id="box-1-size-custom" name="box-1-size" type="radio" value="custom"> 
    I'll use my own box 
</label> 

часть, которая усложняет его немного является тот факт, что пользователь может «добавить поле», который будет дублировать эти поля формы и приращение окна ID на 1. После добавление/удаление несколько ящиков и заполните форму Input::all() может вернуться выглядеть примерно так:

array (size=29) 
    'box-1-nickname' => string 'Something' (length=9) 
    'box-1-destination' => string 'store' (length=5) 
    'box-1-height' => string '1' (length=1) 
    'box-1-width' => string '2' (length=1) 
    'box-1-depth' => string '3' (length=1) 
    'box-1-weight' => string '4' (length=1) 
    'box-1-size' => string 'retail' (length=9) 
    'box-4-nickname' => string 'Another' (length=7) 
    'box-4-destination' => string 'ship' (length=4) 
    'box-4-height' => string '33' (length=2) 
    'box-4-width' => string '1' (length=1) 
    'box-4-depth' => string '22' (length=2) 
    'box-4-weight' => string '33' (length=2) 
    'box-4-size' => string 'custom' (length=6) 
    'box-6-nickname' => string 'Stuff' (length=5) 
    'box-6-destination' => string 'store' (length=5) 
    'box-6-height' => string '34' (length=2) 
    'box-6-width' => string '76' (length=2) 
    'box-6-depth' => string '44' (length=2) 
    'box-6-weight' => string '2' (length=1) 
    'box-6-size' => string 'retail' (length=9) 
    'box-8-nickname' => string 'Things and others' (length=17) 
    'box-8-destination' => string 'ship' (length=4) 
    'box-8-height' => string '5' (length=1) 
    'box-8-width' => string '66' (length=2) 
    'box-8-depth' => string '5' (length=1) 
    'box-8-weight' => string '33' (length=2) 
    'box-8-size' => string 'custom' (length=6) 
    '_token' => string 'BIXSdz16ccJLaOmTxh2ShW5C16W1g0xmpJ10xnwC' (length=40) 

Я изо всех сил, чтобы найти способ проверки этих входов коробки, так как я не знаю, как много окна будут представлены поля или их имена. Любые предложения были бы очень желанными.

ответ

3

Изменение названий ваших входных переменных могло бы быть здесь. Вместо того, чтобы box-1-... и box-2-... и т.д., поэтому не имеют имена, как это:

name="box-nickname[]" 
name="box-destination[]" 
name="box-height[]" 
name="box-width[]" 
name="box-depth[]" 
name="box-weight[]" 

Если у вас было 2 из этих коробок, отправленных на сервер, вызывая Input::all() будет выглядеть примерно так:

'box-nickname' => array(
    "0" => "Value of Box Nickname 1", 
    "1" => "Value of Box Nickname 2", 
    ...), 
'box-destination' => array(
    "0" => "Value of Box Destination 1", 
... 

Вы Получите идею правильно? Проверка это становится простым, правилам нужно только применить к каждому массиву значений, а не каждому числовому ящику отправленный:

$rules = array(
    "box-nickname" => "Required|Max:6", 
    "box-destination" => "Required|Numeric" 
    ... 
); 

И вы можете изменить правила, чтобы все, что вы хотели. Единственная трудная часть этого - отображение сообщений валидатора при перенаправлении обратно на страницу. Поэтому я также рекомендовал бы это связывать с проверкой на стороне клиента, которая обрабатывает динамически генерируемые входы лучше, чем Laravel, при использовании Redirect::to()->withInput()->withErrors($validator).

Надеюсь, что это обеспечило некоторое понимание ваших проблем!

+0

Спасибо, эта работа замечательная, однако на входе в радио есть проблемы. Я попробовал что-то вроде '', но все поля, похоже, разделяют входные данные и Я могу выбрать только один «размер окна» вместо одного в поле. –

+0

Ах да, старые добрые радиокнопки ... В этом примере рассмотрим возможность переключения их на '