如何将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控制器的主要内容,如果未能解决你的问题,请参考以下文章
通过 angular http post 将 json 数据发送到 laravel 控制器