Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用POST请求向Laravel发送JSON_Php_Laravel - Fatal编程技术网

Php 使用POST请求向Laravel发送JSON

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'

因此,我试图挂起laravel HTTP请求,在发送包含JSON正文的post请求时遇到错误

当我第一次尝试它时,我得到了一个错误,使用了与post请求相同的代码,该请求将参数附加到URL

我的商店功能

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。如果您不介意检查,我只是在我的问题中添加了一点