【问题标题】:Undefined property: GuzzleHttp\Exception\ConnectException::$status未定义的属性:GuzzleHttp\Exception\ConnectException::$status
【发布时间】:2017-11-13 17:42:51
【问题描述】:

我在尝试获取请求状态时不断收到此错误。

这是我的代码

ExpenseRepository.php

<?php

namespace Expensetrim\Api\v1\Repositories;

use Auth;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use Expensetrim\Models\Company;
use Illuminate\Support\Facades\DB;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class ExpenseRepository
{
    private $api_url;

    const API_GET = 'GET';
    const API_POST = 'POST';
    const API_PUT = 'PUT';

    function __construct()
    {
        $this->api_url = "http://xxx-xxx-xxx/api/v1/";
    }

    public function api_call($method, $uri, $request = NULL)
{
    try {

        $url=$this->api_url.$uri;
        $client = new Client(['base_uri' => $this->api_url]);
        $response = ($request) ? $client->request($method, $uri, $request) : $client->request($method, $uri);
    }
    catch (RequestException $e) {
        return $e;
    }
    return $this->formatResponseBody($response);
}

public static function formatResponseBody($response)
{
    $body = $response->getBody(true)->getContents();
    return json_decode($body);
}

public function addExpenseType($data)
{
    $uri = 'expense/types/add';
    $response = $this->api_call(self::API_POST, $uri, ['form_params' => $data]);
    return $response;

}

还有 CompanyRepository.php

public function addExpenseType($company_id, $data)
    {
        $data['company_id'] = $company_id;
        $expense = new ExpenseRepository;
        $done = $expense->addExpenseType($data);
        if($done->status == 'success') {
          return true;
        }

        return true;
    }

我需要检查状态是否成功,但不断收到此错误:未定义属性:GuzzleHttp\Exception\ConnectException::$status。 请问我做错了什么?

【问题讨论】:

    标签: laravel guzzle


    【解决方案1】:

    更改您的 formatResponseBody 函数以添加 $response-&gt;getBody()-&gt;rewind();

    public static function formatResponseBody($response)
    {
        $response->getBody()->rewind();
        $body = $response->getBody(true)->getContents();
        return json_decode($body);
    }
    

    在旧版本的guzzle 中,它读取整个正文而不重置指针。使用rewind() 将重置指针。如果这是您问题的根源,rewind() 将解决此问题。它已经在较新的版本中得到解决。

    【讨论】:

      【解决方案2】:

      此行抛出异常:

      catch (RequestException $e) {
          return $e;
      }
      

      并且您正在返回异常。 addExpenseType 方法的返回值实际上是 Guzzle 抛出的异常。

      抛出异常以查看错误。 将您的代码更改为

      catch (RequestException $e) {
              throw $e;
          }
      

      【讨论】:

      猜你喜欢
      • 2019-12-17
      • 2020-11-15
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 2020-01-26
      • 2023-01-20
      • 2019-02-19
      • 2021-02-06
      相关资源
      最近更新 更多