如何将json数据检索到laravel控制器

Posted

技术标签:

【中文标题】如何将json数据检索到laravel控制器【英文标题】:How to retrieve json data to laravel controller 【发布时间】:2017-05-26 18:16:17 【问题描述】:

我知道在 *** 上有这样的问题。

相信我,我已经尝试了所有解决方案,但都无济于事。

我一直在尝试将此 json 数据从 angularjs 发布到 laravel 控制器方法:

[
  
    "id": 2,
    "name": "add-user",
    "display_name": "Add new user",
    "description": "Create a new worker",
  ,
  
    "id": 4,
    "name": "add-role",
    "display_name": "Add role",
    "description": "Add user role",
  
]

这是将此 json 数据发布到 laravel 控制器的代码:

$http(
    method: 'POST',
    url:  '/api/roles/assignPermissions/' + name,
    headers:  'Content-Type' : 'application/json' ,
    data: $.param(role_perms)
).success(function(data)
    console.log(data);
);

现在在这个控制器方法中,我只想检索这个 json 数据,返回它并在控制台中显示它,以确保我在控制器中收到它。

以下是控制器以及我为获取此 json 数据并返回它所做的所有尝试。

控制器:

public function massAssignPerms(Request $request, $roleName)

    $role = Role::where('name', $roleName)->first();


    // this returned nothing
    return json_decode(file_get_contents('php://input'),true); 

    // this returned: add-user=&add-role=
    return file_get_contents('php://input');

    // returned nothing
    return json_decode($request->getContent(), true);

    // returned empty array []
    return $request->json()->all();

我找不到我的代码有什么问题。还是我做错了?

任何帮助将不胜感激。

【问题讨论】:

你用的是什么版本的 laravel? 请显示dd($request);的结果 @jackel414 我正在使用 laravel 5.3 【参考方案1】:

如果您显示的数据确实是发送的数据(我猜您正在使用硬编码值进行测试?)那么它不是正确的 JSON(每个对象的最后一个键后的额外逗号)。 尝试:

[
  
    "id": 2,
    "name": "add-user",
    "display_name": "Add new user",
    "description": "Create a new worker"
  ,
  
    "id": 4,
    "name": "add-role",
    "display_name": "Add role",
    "description": "Add user role"
  
]

【讨论】:

【参考方案2】:

您需要确保在响应中返回变量。要从 Laravel 中的控制器函数返回 JSON,这是the docs 中列出的正确语法:

return response()->json([
    'name' => 'Abigail',
    'state' => 'CA'
]);

假设您希望返回角色查询的结果,您可以执行以下操作。如果你愿意,你也可以指定一个状态码。

return response()->json(['role' => $role], 200);

编辑:如果您希望简单地从原始请求中返回数据,您可以将其作为 JSON 响应的内容:

return response()->json($request->all(), 200);

【讨论】:

感谢您的回答。但是您编写的内容将返回来自控制器中已经存在的 json 的响应。我要返回的是 $request 中传递给控制器​​的 json。 如果在控制器方法的顶部执行dd($request->all());,结果如何?

以上是关于如何将json数据检索到laravel控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何返回并显示保存到数据库laravel的json数据

通过 angular http post 将 json 数据发送到 laravel 控制器

如何使用 Laravel 将数据加载到 Select2 中

Laravel - 如何通过资源路由将变量传递给控制器​​?

Laravel 将 Json 发送到控制器

当我们压缩到视图时,如何对从控制器获取的 JSON 数组中的数据求和(Laravel)