我在寻找完成此任务的最佳路线的建议。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)来接受这些文本输入。
这是我的控制器。我认为我可以使用以下内容,但会检查它是否存在并且不是空白。如果用户提交一个空白表格,那么“有”将无法捕捉它。
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,如果用户将不得不使用3个信息之一(游戏,艺术,音乐),那么你可以使用一个变量,然后在验证中调用它以避免重复码。 – ctf0
请看看这个链接:http://ericlbarnes.com/2015/04/04/laravel-array-validation/ 你想要验证的是一个数组,它应该以不同的方式处理。 – user3613129
正如链接中所建议的,将验证从控制器移到Requests类是明智的。这会让你的控制器不那么混乱。 – user3613129