Codeigniter рассматривает массив как объект в пользовательском классе / библиотеке - PullRequest
2 голосов
/ 05 ноября 2010

Я пытаюсь интегрировать сторонний API (используемый для взаимодействия с данными OpenSecrets.org) в мой сайт Codeigniter и продолжаю получать ошибку об объекте, который обрабатывается как строка, даже если переменная является массивом,

Исходный API доступен здесь: https://github.com/bpilkerton/php-crpapi/blob/master/crpapi.php.

Мои модификации доступны здесь: http://pastebin.com/HmZyhQJR.

Я изменил класс так, что имя файла и объявление классасовпадают, и оба имеют начальные заглавные буквы, и я изменил конструктор так, чтобы он принимал только один массив параметров, которые устанавливаются при вызове класса из моего контроллера.

Соответствующий раздел моего измененного коданиже.Я получаю ошибки для первой строки закрытой функции loadParams и цикла foreach в этой функции.Первая ошибка:

Object of class stdClass could not be converted to string

А вторая:

Invalid argument supplied for foreach()

Пользовательский класс:

class Crp {

function __construct($params) {

    $this->apikey = "a04a90aa18e9e482b3ff2318d313db53";
    $this->baseurl = "http://api.opensecrets.org/";
    $this->output = "json";

    //Allow output type to be overridden on object instantiation
    $this->output = isset($params['output']) ? $params['output']: $this->output;
    $this->method = $params['method'];
    self::loadParams($params);

    /*$this->fileHash = md5($method . "," . implode(",",$params));
    $this->cacheHash = "dataCache/" . $this->fileHash;
    $this->cacheTime = 86400; #one day*/

}

private function loadParams($params) {
    $this->url = $this->baseurl . "?method=" . $this->method .
    "&apikey=" . $this->apikey;

    foreach ($params as $key=>$val) {
        $this->url .= "&" . $key . "=" . $val;
        $this->$key = $val;
    }

    return;
}

Авызов в контроллере

$crp_id = $this->_getRefId($id,'indiv','crp');
$this->load->library('crp',array("method" => "candContrib","cid"=> $crp_id,"cycle"=>"2010","output"=>"json"));
// grabs the CRP id from my reference table; have tested and correctly returns string
function _getRefId($id,$type,$src)
{
    switch ($src) {
        case 'crp':
            $field = 'ref_id as id';
            break;
    }
    switch ($type) {
        case 'indiv':
            $this->db->select($field);
            $this->db->where('ref_id',$id);
            $query = $this->db->get('my_ref_table');
            if($query->num_rows() > 0)
            {
                $query = $query->row();
                return $query->id;
            }
            break;
        case 'org':

            break;
    }
}

Насколько я понимаю, создание пользовательских библиотек в CI, это то, как я передаю массив параметров для новой реализации, и он принимает только один массив.Есть мысли?

1 Ответ

1 голос
/ 05 ноября 2010

Кажется, работает нормально в моей настройке. Не могли бы вы использовать объект для $ crp_id? Можете ли вы также опубликовать код для контроллера?

РЕДАКТИРОВАТЬ: я подключил объект stdClass для $ crp_id и получил точно такую ​​же первую ошибку.

EDIT:

    switch ($type) {
    case 'indiv':
        $this->db->select($field);
        $this->db->where('ref_id',$id);
        $query = $this->db->get('my_ref_table');
        if($query->num_rows() > 0)
        {
            $query = $query->row();
            var_dump($query->id);
            return $query->id;
        }
        return '';
        break;
    case 'org':
        return '';
        break;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...