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

时间:2017-01-11 19:57:06

标签: angularjs json laravel request

StackOverflow上有类似的问题,我知道。

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

我一直试图将这个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();
}

我无法找到我的代码有什么问题。或者可能是我做错了?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

编辑:如果您只想从原始请求中返回数据,则可以改为使用JSON响应的内容:

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

答案 1 :(得分:0)

如果您显示的数据确实是发送的内容(我猜测您正在使用硬编码值进行测试?)那么它不是正确的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"
  }
]