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.
UrlGenerator
Laravelclass在调用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()
。再次,根据需要进行修改。
我在我自己的项目中访问了一个 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.
UrlGenerator
Laravelclass在调用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()
。再次,根据需要进行修改。