Передать массив с маршрутом laravel - PullRequest
0 голосов
/ 31 января 2020

Мой маршрут

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 ]

0 голосов
/ 31 января 2020

Я предположил, что вы хотите вставить значение $i в строку «fail $ i», вы должны заключить имя переменной в фигурную скобку, как показано ниже

$failed_purchases = [];
for($i=0 ; $i < 2; $i++){
    $failed_purchases[] = [
        'reason' => "failed {$i}"
    ];
}

И после l oop значение $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% 22filed + 0% 22% 7D% 2C% 7B% 22 причина 22% 3A% 22 отправлено + 1% 22% 7D% 5D

И на этом этапе его можно использовать в качестве параметра в методе route Существует одно ограничение - максимальная длина URL, которая не должна превышать 2048 символов

0 голосов
/ 31 января 2020

Все выглядит хорошо, кроме одной вещи. Просто убедитесь, что вы указали параметр failed_purchases с некоторым значением по умолчанию в Controller, поскольку вы указали этот параметр как необязательный. Таким образом, ваше действие контроллера должно быть примерно таким:

function success(Request $request, $purchase_id, $failed_purchases=null){
    //Your Code
}
0 голосов
/ 31 января 2020

Я не уверен в лучшем решении. но надеюсь, что это решит вашу проблему.

маршрут будет ->

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');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...