Передать массив с маршрутом laravel
Мой маршрут
Route::get('complete/{purchase_id}/{failed_purchases?}', 'Controller@success');
Мой Контроллер
$failed_purchases = [];
for($i=0 ; $i < 2; $i++){
$failed_purchases[] = [
'reason' => "failed $i"
];
}
return redirect()->route('customer.purchase.success-purchase', [
'purchase_id' => 10,
'failed_purchases' => json_encode($failed_purchases)
]);
Мне нужно передать массив с маршрутом, когда я пробую этот код, но получаю ошибку Missing required parameters for [Route
.
Я тоже пробовал serialize()
. Как это решить?
3 ответа
Все выглядит хорошо, кроме одного. Просто убедитесь, что вы предоставилиfailed_purchases
параметр с некоторым значением по умолчанию в контроллере, поскольку вы указали этот параметр как необязательный. Итак, действие вашего контроллера должно быть примерно таким:
function success(Request $request, $purchase_id, $failed_purchases=null){
//Your Code
}
Я не уверен в лучшем решении. но надеюсь, что это решит вашу проблему.
маршрут будет ->
Route::get('complete/{purchase_id}', 'Controller@success');
// it will pass the array as a querystring. and then you can get from request input.
контроллер будет ->
function success(Request $request, $purchase_id) {
// do your stuff
$failed_purchases = $request->input('failed_purchases');
}
Я предположил, что вы хотите вставить значение $i
в строке "failed $i" вы должны заключить имя переменной в фигурные скобки, как показано ниже
$failed_purchases = [];
for($i=0 ; $i < 2; $i++){
$failed_purchases[] = [
'reason' => "failed {$i}"
];
}
И после цикла значение $failed_purchases
Полагаю, будет равно
$failed_purchases = [
[
"reason" => "failed 0"
],
[
"reason" => "failed 1"
],
]
и после того, как вы используете json_encode, передав значение $failed_purchases
он вернет строку, равную
[{"причина":"сбой 0"},{"причина":"сбой 1"}]
в которых есть много двойных кавычек, и чтобы использовать это значение как часть вашего URL-адреса, вы должны избежать его с помощью функции вроде urlencode
$failed_purchases_string = json_encode($failed_purchases);
$failed_purchases_string_encode = urlencode($failed_purchases_string);
что будет равно что-то вроде этого
%5B%7B%22reason%22%3A%22failed+0%22%7D%2C%7B%22reason%22%3A%22failed+1%22%7D%5D
И на этом этапе его можно использовать как параметр в route
Метод Существует одно ограничение: максимальная длина URL-адреса не должна превышать 2048 символов.