我在尋找完成此任務的最佳路線的建議。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