Я ищу предложения по лучшему маршруту для выполнения этой задачи.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';
}
те массивы так что в проверке должно быть '' gameInfo * https://laravel.com/docs/5..2/validation # validating-arrays, также если пользователь должен будет использовать одну из трех информации (игры, искусства, музыки), в этом случае вы можете использовать переменную, а затем вызвать ее в валидации, чтобы избежать дублирования в код. – ctf0
Пожалуйста, взгляните на эту ссылку: http://ericlbarnes.com/2015/04/04/laravel-array-validation/ То, что вы пытаетесь проверить, это массив, и его нужно обрабатывать по-другому. – user3613129
И, как предложено в ссылке, было бы целесообразно перенести проверки с контроллера на класс Requests. Это сделает ваш контроллер менее загроможденным. – user3613129