使用Guzzle 6消耗REST API

时间:2018-10-27 07:55:15

标签: php codeigniter guzzle

我尝试使用Guzzle 6使用REST API。我阅读了Guzzle的文档,并获得了使用REST API的方法,如下所示:

<?php

class Index extends CI_Controller {

    use GuzzleHttp\Client;

    $client = new Client([    
        'base_uri' => 'https://api.rajaongkir.com/basic/'
    ]); //LINE ERROR

    public function __construct() {
        parent::__construct();
        $this->load->helper('url');
    }

    function index() {
        // $client = new GuzzleHttp\Client(['base_uri' => 'https://api.rajaongkir.com/basic/']);
        $key = "b5231ee43b8ee75764bd6a289c4c576d";
        $response = $client->request('GET','province?key='.$key);
        $data['data'] = json_decode($response->getBody());
        $this->load->view('index', $data);
    }
}

如果我在函数index()中声明变量 $ client ,则没有问题。我得到了JSON,并成功显示在视图中。 我只想声明一次 base uri key ,就可以对所有功能使用 base uri key 有。

因此,我尝试声明包含 base uri key 作为全局变量的变量。但是我在 $ client 行中出错。错误是:

  

语法错误,意外的'$ client'(T_VARIABLE),预期函数(T_FUNCTION)或const(T_CONST)

如何解决?我的代码有什么问题?

1 个答案:

答案 0 :(得分:0)

您不能直接在类定义中编写任何代码。 您需要定义类变量(字段)并在构造函数中创建类的实例,例如:

class Index extends CI_Controller {

    use GuzzleHttp\Client;
    protected $client;

    public function __construct() {
        parent::__construct();
        $this->load->helper('url');
        $this->client = new Client([    
            'base_uri' => 'https://api.rajaongkir.com/basic/'
        ]); //LINE ERROR
    }

    function index() {
        // $client = new GuzzleHttp\Client(['base_uri' => 'https://api.rajaongkir.com/basic/']);
        $key = "b5231ee43b8ee75764bd6a289c4c576d";
        $response = $client->request('GET','province?key='.$key);
        $data['data'] = json_decode($response->getBody());
        $this->load->view('index', $data);
    }
}