Laravel检索并验证多个输入

时间:2016-03-14 16:43:07

标签: php laravel laravel-5.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.',
    ]); 
}

谢谢!

更新

相反,我将把输入名称改为如此。

<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';
}

2 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

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

答案 1 :(得分:0)

为什么不使用标准的Laravel方式?只需使用custom Request class为每个表单进行验证,然后fill()类一次性使用所有经过验证的输入填充模型。

验证:

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

验证后填写:

$info = new Info();
$info->fill($request->all());