2016-03-14 4 views
0

Я ищу предложения по лучшему маршруту для выполнения этой задачи.Laravel Получение и проверка нескольких входов

После регистрации пользователя они перемещаются в меню с 2 шагами. Первым шагом является выбор из списка флажков (все это настроено и работает), а затем на основе того, какие флажки они выбирают, на втором этапе у них есть массив текстовых входов для ввода таких ключевых слов.

Если они проверили флажок «игры», это будет отображаться.

<input type="text" name="gameInfo[]" class="form-control input-global"/> 
<input type="text" name="gameInfo[]" class="form-control input-global"/> 

Если они выбрали флажок «искусство», это будет отображаться.

<input type="text" name="artInfo[]" class="form-control input-global"/> 
<input type="text" name="artInfo[]" class="form-control input-global"/> 

Таким образом, для разных массивов может быть несколько текстовых входов. Цель состоит в том, чтобы взять все, что есть в текстовых вводах, и сохранить его в моей сводной таблице, которая также включает user_id и type_id (что касается игр, искусства и т. Д.). Сводная таблица готова к работе, я просто создал дополнительный столбец (type_details) для ввода этих текстовых входов.

Вот мой контроллер. Я думаю, что могу использовать следующее, но это проверяет, есть ли оно там И не пусто. Если пользователь отправляет пустую форму, «has» не поймает ее.

if ($request->has('gameInfo') 
{ // code here } 

Если я могу использовать этот тип логики для каждого из массивов (gameInfo, Artinfo и т.д.), я думаю, что бы решить эту проблему, но я не могу заставить его работать.

Контроллер:

$gameInfo = Input::get('gameInfo'); 
$artInfo = Input::get('artInfo'); 
$musicInfo = Input::get('musicInfo'); 
$buildingStuffInfo = Input::get('buildingStuffInfo'); 
$educationalInfo = Input::get('educationalInfo'); 

if ($request->has($gameInfo)) 
{ 
    $this->validate($request, [ 
     'gameInfo' => 'required', 
    ], [ 
     'required' => 'You must enter information on the games.', 
    ]); 
} 

if ($request->has($artInfo)) 
{ 
    $this->validate($request, [ 
     'artInfo' => 'required', 
    ], [ 
     'required' => 'You must enter information on the art.', 
    ]); 
} 

Спасибо!

UPDATE:

Вместо этого, я собираюсь поставить имена входных как так.

<input type="text" name="typeDetails[games]" class="form-control input-global"/> 
<input type="text" name="typeDetails[art]" class="form-control input-global"/> 

JS:

var data = { 'typeDetails[games]' : [], 'typeDetails[art]' : [] }; 

$("input[name='typeDetails[games]']").each(function() { 
    data['typeDetails[games]'].push($(this).val()); 
}); 

$("input[name='typeDetails[art]']").each(function() { 
    data['typeDetails[art]'].push($(this).val()); 
}); 

Однако, на мой контроллер, он только захватывает часть 'игр массива и не продолжает проверять часть «искусства».

$typeDetails = Input::get('typeDetails');    

if ($request->has('typeDetails.games')) 
{ 
    return 'games'; 
} 

if ($request->has('typeDetails.art')) 
{ 
    return 'art'; 
} 
+0

те массивы так что в проверке должно быть '' gameInfo * https://laravel.com/docs/5..2/validation # validating-arrays, также если пользователь должен будет использовать одну из трех информации (игры, искусства, музыки), в этом случае вы можете использовать переменную, а затем вызвать ее в валидации, чтобы избежать дублирования в код. – ctf0

+0

Пожалуйста, взгляните на эту ссылку: http://ericlbarnes.com/2015/04/04/laravel-array-validation/ То, что вы пытаетесь проверить, это массив, и его нужно обрабатывать по-другому. – user3613129

+0

И, как предложено в ссылке, было бы целесообразно перенести проверки с контроллера на класс Requests. Это сделает ваш контроллер менее загроможденным. – user3613129

ответ

0

Вы могли бы сделать что-то вроде следующего:

$this->validate($request, [ 
    'gameInfo.*' => 'sometimes|array', 
    'artInfo.*' => 'sometimes|array', 
    // etc 
]); 
0

Почему бы вам не использовать стандартный способ Laravel? Просто используйте custom Request class для каждой формы для проверки и fill() класс для заполнения модели со всеми проверенными входами сразу.

Validation:

public function rules() 
{ 
    return [ 
     'title' => 'required|unique|max:255', 
     'email' => 'required|email|unique:users' 
    ]; 
} 

Заполнение после проверки:

$info = new Info(); 
$info->fill($request->all()); 
Смежные вопросы