首页 > 解决方案 > Laravel:使用发布路线重定向

问题描述

一直试图找到一种方法来调用将多维数组传递给 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));

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

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

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

想法?

标签: phplaravel

解决方案


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

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

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

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


推荐阅读