0

我的路线

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()。如何解决这个问题?

4

3 回答 3

0

我想你想插入$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%22原因%22%3A%22失败+0%22%7D%2C%7B%22原因%22%3A%22失败+1%22%7D%5D

在此步骤中,它可以用作route方法中的参数。有一个限制是 URL 的最大长度不能超过2048 个字符

于 2020-01-31T06:46:01.153 回答
0

除了一件事,一切看起来都很好。只需确保您failed_purchases在 Controller 中为参数提供了一些默认值,因为您已将此参数指定为可选。所以你的控制器动作应该是这样的:

function success(Request $request, $purchase_id, $failed_purchases=null){
    //Your Code
}
于 2020-01-31T06:49:20.267 回答
0

我不确定更好的解决方案。但希望这能解决你的问题。

路线将是->

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');
}
于 2020-01-31T06:02:18.903 回答