【问题标题】:Laravel: Redirect with post routeLaravel:使用发布路线重定向
【发布时间】:2021-03-06 17:37:48
【问题描述】:

一直在尝试找到一种方法来调用以将多维数组传递给 Post 路由,但没有成功。

数组如下所示:

    "order" => array:16 [
        "id" => "1"
        "total" => "4825"
        "neighborhood" => "Barrio Bravo"
      ]
      "products" => array:2 [
        4 => array:4 [
          "id" => "4"
          "name" => "Maestro Dobel 750ml"
          "price" => "530"
          "quantity" => "1"
        ]
        1 => array:4 [
          "id" => "1"
          "name" => "Don Julio 70 700ml"
          "price" => "650"
          "quantity" => "1"
        ]
      ]
      "grandTotal" => "1180"
      "balanceToPay" => "354"
      "cartTotal" => "826"

我在unit test 中断言路由没有任何问题,像这样调用路由:

$this->post(route('order.success', $orderInfo));

但是当涉及到控制器时,我找不到通过 orderInfo 数组重定向到 order.success 的方法。

这不起作用,因为 redirect 仅适用于 GET

return redirect(route('order.success', $orderInfo));

想法?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    它不适用于简单的重定向,因为您无法选择 HTTP 方法。当您进行重定向时,它始终是 GET。它适用于您的测试,因为您手动发出 POST 请求。

    我可以看到 2 个解决方案:

    1. 您可以使用 GET 方法发送数据(它们作为 URL 参数添加)。如果他们不保密,这可能是一个解决方案。
    2. 如果您不想在 URL 中发送这些数据,则必须将它们保存在某个地方,并在您在 order.success 页面上时从存储中获取它们。例如,您可以将它们保存在会话存储中或浏览器的本地存储中。

    另外,如果测试在您的应用中没有发生的行为(发布请求而不是重定向),则您的测试并不好。

    【讨论】:

    • 我尝试使用 GET 路由作为参数,但我收到此错误 Array to string conversion。我不太确定数组是否可以作为参数传递。我可能会尝试将信息存储在某处的方法,并在我被 GET nout 重定向后尝试获取它。不理想,但它可能会起作用。
    • @FerToasted 是的,我认为这是处理此类问题的最佳和最安全的方法。您没有提到您的阵列可以有多大,所以请记住会话和本地存储都有内容大小限制,但它们非常高。
    猜你喜欢
    • 2018-12-08
    • 2021-09-28
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 2022-01-26
    • 2018-02-13
    • 2021-12-17
    相关资源
    最近更新 更多