【问题标题】:Laravel route url changing after app()->handle() functionapp()->handle() 函数后 Laravel 路由 url 发生变化
【发布时间】:2018-11-15 06:45:40
【问题描述】:

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

我错过了什么?

【问题讨论】:

  • 是测试代码吗?好奇你为什么直接打电话给app()->handle()

标签: php laravel routes


【解决方案1】:

Request::create() 是继承自 Symfony 的 HTTP 请求类的方法。调用时,如果你没有传入任何$_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()。再次,根据需要进行修改。

【讨论】:

  • 完美!谢谢
猜你喜欢
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 2015-03-12
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
相关资源
最近更新 更多