【问题标题】:Laravel 5.5 Request is empty in Restful controllerLaravel 5.5 请求在 Restful 控制器中为空
【发布时间】:2018-03-05 03:20:44
【问题描述】:

我的 routes/web.php 中有这样的路由

Route::resource('/api/surveys', 'SurveyController');

正如文档所述,它为 API 创建了所有需要的路由。这是一个函数,当我使用 /api/surveys 路由时会执行:

public function index()
{

    $request = request();

    if(!$request->hasHeader('token')) {

        return "No auth token found.";
    }

    $tokenCheck = $this->userService->isTokenValid($request->header('token'));

    if($tokenCheck !== true) {

        return $tokenCheck;

    }

    return $this->surveyService->all();
}

它做什么,它检查是否设置了令牌头参数,如果没有,它返回一个错误,如果是,它检查令牌是否有效等等。如果一切正常,它应该从数据库返回调查。

public function surveys() {

    $request = \Request::create('/api/surveys', 'GET');
    $request->headers->set('Accept', 'application/json');
    $request->headers->set('token', \Cookie::get('token'));
    $response = \Route::dispatch($request);

    print_r('<pre>');
    print_r($response);
    print_r('</pre>');

}

我有一个网站,应该使用我刚刚创建的 API 来获取所有调查记录。我创建了一个新的请求对象,使用从 cookie 获得的令牌设置标头“令牌”,然后尝试分派并获得响应。但问题是每次我得到“找不到身份验证令牌”。错误。这意味着 $request->hasHeader('token') 返回 false,即使我在请求中设置它也很难。如果我在 Restful 控制器中 print_r $request->all(),我会得到一个空数组。

我尝试 Postman 使用 token 参数访问此 API,它在 postman 中运行良好,但在这里,请求似乎在传输到 API 控制器时消失了。

我在这里做错了什么?

【问题讨论】:

  • 获取请求对象作为索引函数中的参数。
  • 我试过了,还是不行。

标签: laravel rest request


【解决方案1】:

当您手动创建请求并分派它时,这可以让路由调用正确的控制器,但这不会影响容器中绑定的请求。

当您的“假”请求由 api 控制器处理时,它从容器中提取的请求是用户发出的原始“真实”请求。

您需要app()-&gt;handle($request) 新请求,而不是使用新请求调度路由。但是,这将用新的“假”请求完全替换原始“真实”请求,因此原始请求中的所有内容都将丢失。

话虽如此,这种使用你自己的 api 的方法是不鼓励的,即使是 Taylor。你可以在this Github issue 上阅读他的评论。因此,像这样使用您自己的 api 可能会奏效,但您也可能会遇到一些其他无法预料的问题。

更合适的解决方案是将 api 路由调用的逻辑提取到另一个类,然后从您的 api 路由和 web 路由中调用提取的逻辑。

【讨论】:

  • 你能给我一些关于合适解决方案的更多信息吗?谢谢。
  • 他基本上是指将控制器内部的逻辑复制到服务或其他东西中的随机函数,然后调用该服务函数。忘记模拟请求
猜你喜欢
  • 1970-01-01
  • 2020-04-01
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
  • 2018-08-23
  • 2019-11-23
相关资源
最近更新 更多