Php 使用POST请求向Laravel发送JSON
因此,我试图挂起laravel HTTP请求,在发送包含JSON正文的post请求时遇到错误 当我第一次尝试它时,我得到了一个错误,使用了与post请求相同的代码,该请求将参数附加到URL 我的商店功能Php 使用POST请求向Laravel发送JSON,php,laravel,Php,Laravel,因此,我试图挂起laravel HTTP请求,在发送包含JSON正文的post请求时遇到错误 当我第一次尝试它时,我得到了一个错误,使用了与post请求相同的代码,该请求将参数附加到URL 我的商店功能 public function store(Request $request) { $validator = Validator::make($request->all(), [ 'title' => 'required|string'
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|string',
'details' => 'required|string',
'completed' => 'required',
'modified' => 'required'
]);
$user = Auth::id();
$userDetails = UserDetailModel::find(1)->UserDetailId;
$todo = new UserTodoModel;
$todo->UserDetailId = $userDetails;
$todo->Title = $request->title;
$todo->Details = $request->details;
$todo->completed = $request->completed;
$todo->modified = $request->modified;
$todo->save();
return response()->json([
'message' => 'Successfully added!'
], 200);
}
我犯了一个错误
Integrity constraint violation: 1048 Column 'Title' cannot be null (SQL: insert into `UserTodo` (`UserDetailId`, `Title`, `Details`, `completed`, `modified`, `DateModified`, `DateCreated`) values (1, ?, ?, ?, ?, 2020-05-19 01:06:50, 2020-05-19 01:06:50)) in file D:\My Workspace\Laravel\awiz\vendor\laravel\framework\src\Illuminate\Database\Connection.php on line 671
然后我找到了这个帖子
这反过来又让我使用了这个
public function store(Request $request)
{
// dd($request);
$validator = Validator::make($request->all(), [
'Title' => 'required|string',
'Details' => 'required|string',
'completed' => 'required',
'modified' => 'required'
]);
$user = Auth::id();
$userDetails = UserDetailModel::find(1)->UserDetailId;
$testData = (object) $request->json()->all();
// dd($testData);
$todo = new UserTodoModel;
$todo->UserDetailId = $userDetails;
$todo->Title = $testData->Title;
$todo->Details = $testData->Details;
$todo->completed = $testData->completed;
$todo->modified = $testData->modified;
dd($testData);
$todo->save();
return response()->json([
'message' => 'Successfully added!'
], 200);
}
然后我开始出现这个错误,不知道为什么
ErrorException: Undefined property: stdClass::$Title in file D:\My Workspace\Laravel\awiz\app\Http\Controllers\Dashboard\UserTodoController.php on line 49
编辑
抱歉,我忘记发布dd输出
当我使用dd$testData时,我得到了这个
{#1251
+"0": array:8 [
"UserTodoId" => 0
"UserDetailId" => 1
"Title" => "Test item2"
"Details" => "This is a test item2"
"completed" => 1
"modified" => 0
"DateCreated" => "2020-05-20T00:00:00.000000Z"
"DateModified" => "2020-05-22T00:00:00.000000Z"
]
}
但是当我使用dd$testData->Title时,我得到了相同的错误
Undefined property: stdClass::$Title
我正在运行laravel 7.0
至于我的要求,我用的是邮递员
这是我正在发送的JSON
[
{
"UserTodoId": 0,
"UserDetailId": 1,
"Title": "Test item2",
"Details": "This is a test item2",
"completed": 1,
"modified": 0,
"DateCreated": "2020-05-20T00:00:00.000000Z",
"DateModified": "2020-05-22T00:00:00.000000Z"
}
]
这些是我的标题
编辑2
如果我发送一个嵌套的JSON,我会怎么做?我将如何尝试访问内部JSON?
嵌套JSON
{
"fName": "Ahmed",
"lName": "Abdelsalam",
"email": "test@tessssssdst.com",
"password": "123456789",
"userDetails": {
"FirstName": "Ahmed",
"MiddleName": "Adil",
"LastName": "Abdelsalam",
"Designation": "Cashier",
"Gender": "Male",
"DOB": "2020-05-20T00:00:00.000000Z"
}
}
控制器
public function register(Request $request)
{
// Creating the user entry
// JSON conversion
$userData = (object) $request->json()->all();
// Validation
// $userData->validate([
// 'fName' => 'required|string',
// 'lName' => 'required|string',
// 'email' => 'required|string|email|unique:users',
// 'password' => 'required|string'
// ]);
// Creating instance
$user = new User;
$user->first_name = $userData->fName;
$user->last_name = $userData->lName;
$user->email = $userData->email;
$user->password = bcrypt($userData->password);
// Saving instance
$user->save();
// Creating the user details entry
// Getting user ID
$userId = User::where('email', $userData->email);
// JSON conversion
$userDetailsRawData = $userData->userDetails;
$userDetailsData = (object) $userDetailsRawData->json()->all();
dd($userDetailsData);
// Validation
// $userDetailsData->validate([
// 'FirstName' => 'required|string',
// 'MiddleName' => 'required|string',
// 'LastName' => 'required|string',
// 'Designation' => 'required|string',
// 'Gender' => 'required|string',
// 'DOB' => 'required',
// 'Email' => 'required|string|email|unique:userdetails',
// ]);
// Creating instance
$userDetails = new UserDetailModel();
$userDetails->FirstName = $userDetailsData->FirstName;
$userDetails->MiddleName = $userDetailsData->MiddleName;
$userDetails->LastName = $userDetailsData->LastName;
$userDetails->Designation = $userDetailsData->Designation;
$userDetails->Email = $userData->email;
$userDetails->Gender = $userDetailsData->Gender;
$userDetails->DOB = $userDetailsData->DOB;
$userDetails->UserId = $userId;
// Saving instance
$userDetails->save();
return response()->json([
'message' => 'Successfully created user!'
], 201);
}
没有添加json->all,我最终得到了一个数组,当我添加它时,我得到了一个错误,我尝试使用json_decode转换数组,但我无法使用“->”访问生成的json中的元素。我似乎在这里缺少一些内容您请求的元素标题为空或不存在于请求中
这可能是由于打字错误、大写字母错误或类似原因造成的
第一个错误显示了数据库中的一个错误,该错误试图插入一个包含显式必需字段null的记录
第二个消息告诉您正在尝试访问尚未初始化的属性
编辑:
查看变量和请求的转储后,可以看到您正在将请求设置为一个数组的元素
这就是为什么会员头衔不存在的原因。
如果您尝试这样访问:
$testData[0]->标题您将找到您的价值
之前不会出现错误,因为您正在将值分配给主$testData对象
我的建议是如下更新您的请求:
{
"UserTodoId": 0,
"UserDetailId": 1,
"Title": "Test item2",
"Details": "This is a test item2",
"completed": 1,
"modified": 0,
"DateCreated": "2020-05-20T00:00:00.000000Z",
"DateModified": "2020-05-22T00:00:00.000000Z"
}
只发送一个对象,而不是只发送一个元素的数组。您应该发布dd的输出以及执行请求的方式。您使用的是哪一版本的Laravel?您确定在请求中设置了内容类型:application/json吗?不确定在第二次编辑中要访问什么,但使用对象访问请求的元素是一项很难的要求吗?如果是,您仍然可以将json_decode中的第二个参数设置为true。我检查了很多次拼写错误,我甚至更改了所有变量名,仍然为no-vail。如果您不介意检查,我只是在我的问题中添加了一点