我正在寻找有关完成此任务的最佳途径的建议。
用户注册后,他们将进入一个包含两个步骤的菜单。第一步是从复选框列表中选择(这是全部设置和工作),然后根据他们选择的复选框,在第二步,他们有一个文本输入数组输入关键字,如此。
如果他们选中了“游戏”复选框,则会显示。
<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';
}
答案 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());