Laravel 5.5 请求在 Restful Controller 中为空

标签 laravel rest request

我的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();
}

它的作用是,检查是否设置了 token header 参数,如果没有设置,则返回错误,如果设置了,则检查 token 是否有效等。如果一切正常,它应该从数据库返回调查。

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 获得的 token 设置 header “ token ”,然后尝试分派(dispatch)并获取响应。但问题是,每次我都会收到“未找到身份验证 token ”的信息。错误。这意味着 $request->hasHeader('token') 返回 false,即使我在请求中将其设置在这里也是如此。如果我在 Restful Controller 中 print_r $request->all() ,我会得到一个空数组。

我尝试使用 Postman 使用 token 参数访问此 API,它在 postman 中工作正常,但在这里,请求在传输到 API Controller 时似乎消失了。

我在这里做错了什么?

最佳答案

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

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

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

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

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

关于Laravel 5.5 请求在 Restful Controller 中为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46383458/

相关文章:

laravel - 在 AWS Elastic Beanstalk 上运行 Laravel 的迁移命令

java - Jersey 测试框架 2.5 - 测试 POST 方法

javascript - 从nodejs服务器端进行ajax调用

api - 使用远程API时处理错误

javascript - 如何从 GET 请求收集 Google Analytics 的客户端 ID 服务器端?

google-app-engine - GAE Golang 实现一些独特的请求队列?

php - 调用未定义函数 iconv_strpos() laravel 5.2

php - Laravel php artisan 迁移不工作

php - Eloquent 下拉菜单

java - 如何使用 Android 中 FirstActivity 的数据填充 SecondActivity 上的 ListView?