Laravel 路由 url 在 app()->handle() 函数之后改变

Laravel route url changing after app()->handle() function

我在我自己的项目中访问了一个 api,但现在我遇到了 route 函数的问题,在使用 app()->handle($req) 发送请求后,路由函数生成一个不同的 url

   $req = Request::create('/api/auth/login', 'POST', [
        "user" => $request->user,
        "password" => $request->password,
    ]);

    $redirect = route('home'); // http://127.0.0.1:8000/home

    $res = app()->handle($req);

    $redirect = route('home'); // http://localhost/home

我错过了什么?

Request::create()是继承自Symfony的HTTP Requestclass的方法。调用时,如果您不传递任何 $_SERVER 详细信息,则 it will use reasonable defaults.

UrlGeneratorLaravelclass在调用route()等函数时使用当前Request来判断全限定域名。由于您没有告诉请求当前域是什么,它正在恢复为 localhost.

如果您所处的环境中 $_SERVER 填充了正确的信息,您可以将其传递给正确的参数:

Request::create(
    '/api/auth/login',
    'POST',
    [
        'user' => $request->user,
        'password' => $request->password,
    ],
    [], // cookies
    [], // files
    $_SERVER
);

可能适合的其他潜在解决方案:

  • 使用Request::createFromGlobals()用PHP的superglobals如$_POST$_SERVER等填充一个请求,然后修改你想改变的部分.
  • 如果$request变量已经持有一个Laravel请求实例,你可以调用$request->duplicate()。再次,根据需要进行修改。