I am trying to send multidimensional array from javascript to laravel function and save it in session
my JS array looking like this:
[
1 => [
2022-07-12 => [1, 2], [2, 3]
2022-07-13 => [2, 1], [3, 3]
],
2 => [
2022-07-14 => [1, 2], [2, 3]
2022-07-16 => [2, 1], [3, 3]
],
]
i have the array in javascript its correct, i am send it to laravel function with axios like that:
Axios.post('/meal-plans/set-weeks-meals', weeksMeals).then((response) => {
console.log(response.data)
});
and in laravel function i want to save that array in session:
public function setWeeksMeals(Request $request)
{
session()->put('weeks_meals', $request->weeksMeals);
return response()->json(['status' => true, 'weeksMeals' => $request->weeksMeals], 200);
}
i got the in my response
{status: true, weeksMeals: null}
and this is my route
Route::post('set-weeks-meals', [Controllers\MealController::class, 'setWeeksMeals'])->name('meals.setWeeksMeals');
when i console.log(weeksMeals);
Array(2)
1: Array(0)
2022-07-12: Array(1)
0: (2) ['1', '1']
length: 1
[[Prototype]]: Array(0)
2022-07-13: Array(1)
0: (2) ['2', '2']
length: 1
[[Prototype]]: Array(0)
length: 0
[[Prototype]]: Array(0)
length: 2
[[Prototype]]: Array(0)
and in laravel function dd($request->input());
array:2 [
0 => null
1 => []
]
and here how i generated the weeksMeals Array
let weeksMeals = [];
if (Array.isArray(weeksMeals[week])) {
if (Array.isArray(weeksMeals[week][day])) {
weeksMeals[week][day].push([meal.options[meal.selectedIndex].value, gram.options[gram.selectedIndex].value]);
} else {
weeksMeals[week][day] = [];
weeksMeals[week][day].push([meal.options[meal.selectedIndex].value, gram.options[gram.selectedIndex].value]);
}
} else {
weeksMeals[week] = [];
weeksMeals[week][day] = [];
weeksMeals[week][day].push([meal.options[meal.selectedIndex].value, gram.options[gram.selectedIndex].value]);
}
can i know how to send this array to laravel function??
CodePudding user response:
In order for $request->weeksMeals
to work, you need to send the data from your Axios
call with weeksMeals
as an object
index:
Axios.post('/meal-plans/set-weeks-meals', {'weeksMeals': weeksMeals}).then((response) => {
console.log(response.data)
});
Without that, you were receiving JSON like this:
{'0': [...], '1': [...]}
Which means that $request->weeksMeals
is null
. $request->input('0')
and $request->input('1')
would work, or just $request->input()
. Once the change is made on the Axios
side, the data being sent is:
{'weeksMeals': {'0' => [...], '1' => [...]}}
And $request->weeksMeals
would work. I can't speak to the inner arrays not sending properly, that is likely fixed by defining let weeksMeals = {}
instead of let weeksMeals = []
, since object
s accept non-numeric/sequential keys like '1', '2', '2020-01-01'
, etc, while array
s do not.