Estoy tratando de enviar una matriz multidimensional desde javascript a la función laravel y guardarla en la sesión
mi matriz JS se ve así:
[ 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] ], ]tengo la matriz en javascript es correcta, la envío a la función laravel con axios así:
Axios.post('/meal-plans/set-weeks-meals', weeksMeals).then((response) => { console.log(response.data) });y en la función laravel quiero guardar esa matriz en sesión:
public function setWeeksMeals(Request $request) { session()->put('weeks_meals', $request->weeksMeals); return response()->json(['status' => true, 'weeksMeals' => $request->weeksMeals], 200); }lo obtuve en mi respuesta
{status: true, weeksMeals: null}y esta es mi ruta
Route::post('set-weeks-meals', [Controllers\MealController::class, 'setWeeksMeals'])->name('meals.setWeeksMeals');cuando consola.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)y en la función laravel dd($request->input());
array:2 [ 0 => null 1 => [] ]y aquí cómo generé el 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]); }¿Puedo saber cómo enviar esta matriz a la función laravel?
Para que $request->weeksMeals funcione, debe enviar los datos de su llamada Axios weeksMeals como un índice de object :
Axios.post('/meal-plans/set-weeks-meals', {'weeksMeals': weeksMeals}).then((response) => { console.log(response.data) });Sin eso, estabas recibiendo JSON así:
{'0': [...], '1': [...]} Lo que significa que $request->weeksMeals es null . $request->input('0') y $request->input('1') funcionarían, o simplemente $request->input() . Una vez que se realiza el cambio en el lado de Axios , los datos que se envían son:
{'weeksMeals': {'0' => [...], '1' => [...]}} Y $request->weeksMeals funcionaría. No puedo hablar de que las matrices internas no se envíen correctamente, eso probablemente se solucione definiendo let weeksMeals = {} en lugar de let weeksMeals = [] , ya que los object aceptan claves no numéricas/secuenciales como '1', '2', '2020-01-01' , etc., mientras que las array no.