Передать массив с маршрутом 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 символов.

Другие вопросы по тегам