在app() - > handle()函数之后更改Laravel路径网址

时间:2018-06-05 17:31:50

标签: php laravel routes

我在我自己的项目中访问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

我错过了什么?

1 个答案:

答案 0 :(得分:2)

Request::create()是继承自Symfony的HTTP Request类的方法。如果您未传递任何$_SERVER详细信息,请it will use reasonable defaults

UrlGenerator Laravel类在调用route()等函数时使用当前的Request来确定完全限定的域名。由于您没有告诉请求当前域是什么,因此它将恢复为localhost

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

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

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

  • 使用Request::createFromGlobals()使用PHP的超级全局(例如$_POST$_SERVER等)填充请求,然后修改要更改的部分。
  • 如果$request变量已经拥有Laravel Request实例,则可以调用$request->duplicate()。再次,根据需要进行修改。