首页 > 解决方案 > 如何防止未定义的属性:命中 API 时的 stdClass::$data

问题描述

我使用 Laravel 创建了一个表单,据此我从用户那里获取应该存储在 API 中的数据。我编写了一个名为global_curl的单独函数,该函数应该将数据发布到 API。问题是当我尝试通过发布请求访问 REST API 时,我收到以下错误:(1/1) ErrorException Undefined property: stdClass:: $数据

我的控制器

//Post Request of plan entries
public function validatePlanEntries(Request $request){
    $data = array(
        'DobPrincipalTraveller' => $request->dob,
        'TravelStartDate' => $request->departure_date,
        'TravelEndDate' => $request->return_date,
        'CoverOption' => $request->cover,
        'DobOfSpouse' => $request->spousedob,
        'Children' => '2018-10-07',
        'WithSpouse' => 0
    );
    // dd($data);
   /*Posts data to Travel Plans API*/
   $travelplan_data = $this->global_Curl($data, 'api/travel/get-plans')->data;
}

卷曲功能

public function global_Curl($data, $url){
    //dd($_ENV['API_ENDPOINT_NGINX_IP'] . '/' . $url);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, ($_ENV['API_ENDPOINT_NGINX_IP'] . '/' . $url));
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = json_decode(curl_exec($ch));
    curl_close($ch);
    return $response;
}

来自 POSTMAN 的 API 数据结构

{
    "DobPrincipalTraveller":"1978-01-22",
    "TravelStartDate":"2018-10-20",
    "TravelEndDate":"2018-10-25",
    "CoverOption":"Standard",
    "WithSpouse":"1",
    "DobOfSpouse":"1985-03-18",
    "Children":[
        {
            "DateOfBirth":"2015-05-23"
        },
        {
            "DateOfBirth":"2016-09-13"
        }
    ]
}

标签: phplaravelapi

解决方案


它应该是这样的:当你将数组传递给函数时,它应该能够接受数组作为参数,所以你应该像我一样定义你的 curl 函数。

//Post Request of plan entries
public function validatePlanEntries(Request $request){
    $data = array(
        'DobPrincipalTraveller' => $request->dob,
        'TravelStartDate' => $request->departure_date,
        'TravelEndDate' => $request->return_date,
        'CoverOption' => $request->cover,
        'DobOfSpouse' => $request->spousedob,
        'Children' => '2018-10-07',
        'WithSpouse' => 0
    );
    // dd($data);
   /*Posts data to Travel Plans API*/
   $travelplan_data = $this->global_Curl($data, 'api/travel/get-plans');
}

public function global_Curl(array $data, $url){
    //dd($_ENV['API_ENDPOINT_NGINX_IP'] . '/' . $url);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, ($_ENV['API_ENDPOINT_NGINX_IP'] . '/' . $url));
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = json_decode(curl_exec($ch));
    curl_close($ch);
    return $response;
}

试试这个..希望它会工作


推荐阅读