Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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 错误:"__construct()必须是一个数组,未给定任何值;_Php_Codeigniter_Oauth_Twitter - Fatal编程技术网

Php 错误:"__construct()必须是一个数组,未给定任何值;

Php 错误:"__construct()必须是一个数组,未给定任何值;,php,codeigniter,oauth,twitter,Php,Codeigniter,Oauth,Twitter,通过控制器中的以下代码,我能够将OAuth访问令牌传递到TwitterAPI 1.1版并执行查询: // Set access tokens here $settings = array( 'oauth_access_token' => "My Oauth Access Token", 'oauth_access_token_secret' => "My Oauth Access Token Secret", 'consumer_key' => "My

通过控制器中的以下代码,我能够将OAuth访问令牌传递到TwitterAPI 1.1版并执行查询:

// Set access tokens here
$settings = array(
    'oauth_access_token' => "My Oauth Access Token",
    'oauth_access_token_secret' => "My Oauth Access Token Secret",
    'consumer_key' => "My Consumer Key",
    'consumer_secret' => "My Consumer Secret"   
    );


$url = 'https://api.twitter.com/1.1/followers/ids.json';
$getfield = '?username=somename';
$requestMethod = 'GET';
$twitter = new TwitterAPIExchange($settings);
echo $twitter->setGetfield($getfield)
             ->buildOauth($url, $requestMethod)
             ->performRequest();
然而,出于安全原因,我读到消费者机密在应用程序中不应该是人类可读的。因此,我将OAuth访问令牌从控制器(见上文)移到以下位置(见下文):

application\config\twitter\u settings.php

现在我遇到以下错误,我不确定如何将OAuth访问令牌传递给:

遇到一个PHP错误

严重程度:4096

消息:参数1传递给TwitterAPIExchange::\uu构造()必须 是一个数组,未给定,已调用 C:\wamp\www\twitter\u app\theworks\core\Loader.php,第1099行和 明确的

文件名:twitter/TwitterAPIExchange.php

电话号码:33

确保您传入了正确的参数

这是我的控制器:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Search extends CI_Controller {
    public function index()
    {                   
        $this->config->load('twitter_settings');
        //$this->load->library('encrypt');
        $this->load->library('/twitter/TwitterAPIExchange');

        $url = 'https://api.twitter.com/1.1/followers/ids.json';
        $getfield = '?username=stackexchange';
        $requestMethod = 'GET';
        $twitter = new TwitterAPIExchange(/* I need to pass the OAuth tokens here */);
        echo $twitter->setGetfield($getfield)
                     ->buildOauth($url, $requestMethod)
                     ->performRequest();        
    }
}

/* End of file search.php */
/* Location: ./application/controllers/search.php */
以下是错误:

遇到一个PHP错误

严重程度:4096

消息:参数1传递给TwitterAPIExchange::\uu构造()必须 是一个数组,未给定,已调用 C:\wamp\www\twitter\u app\theworks\core\Loader.php,第1099行和 明确的

文件名:twitter/TwitterAPIExchange.php

电话号码:33

确保您传入了正确的参数

因此,当我查看twitter/TwitterAPIExchange.php的第33行时,我发现:

/**
     * Create the API access object. Requires an array of settings::
     * oauth access token, oauth access token secret, consumer key, consumer secret
     * These are all available by creating your own application on dev.twitter.com
     * Requires the cURL library
     * 
     * @param array $settings
     */
    public function __construct(array $settings)
    { //...

只需使用配置项重做
$settings

$this->config->load('twitter_settings');   
$this->load->library('/twitter/TwitterAPIExchange');
$settings = array(
    'oauth_access_token' => $this->config->('oauth_access_token'),
    'oauth_access_token_secret' => $this->config->('oauth_access_token_secret'),
    'consumer_key' => $this->config->('consumer_key'),
    'consumer_secret' => $this->config->('consumer_secret')   
    );

$twitter = new TwitterAPIExchange($settings);

更改库加载线。删除此项:

$this->load->library('/twitter/TwitterAPIExchange');
并添加如下库:

require_once APPPATH.'libraries/twitter/TwitterAPIExchange.php';

class Twitter extends CI_Controller{
...
}

这解决了我的问题。我已经在php codeigniter中使用了它。

+1感谢您的回复Stormdrain。我重写了它,得到了相同的错误“…\u construct()必须是一个数组,没有给定…”(参见上面的编辑1)奇怪。请尝试打印
$settings
数组,以确保已设置。在
$twitter=newtwitter…
添加
打印($settings)之前;死亡
并查看您得到了什么。另外,您是否在config.php中设置了加密密钥?没有它,加密库就不能工作。现在它工作了吗?您是否能够
打印
$settings
数组?它们看起来是否正确?这就是错误所在。看见您将收到该错误消息,因此其中一项未设置。
/**
     * Create the API access object. Requires an array of settings::
     * oauth access token, oauth access token secret, consumer key, consumer secret
     * These are all available by creating your own application on dev.twitter.com
     * Requires the cURL library
     * 
     * @param array $settings
     */
    public function __construct(array $settings)
    { //...
$this->config->load('twitter_settings');   
$this->load->library('/twitter/TwitterAPIExchange');
$settings = array(
    'oauth_access_token' => $this->config->('oauth_access_token'),
    'oauth_access_token_secret' => $this->config->('oauth_access_token_secret'),
    'consumer_key' => $this->config->('consumer_key'),
    'consumer_secret' => $this->config->('consumer_secret')   
    );

$twitter = new TwitterAPIExchange($settings);
$this->load->library('/twitter/TwitterAPIExchange');
require_once APPPATH.'libraries/twitter/TwitterAPIExchange.php';

class Twitter extends CI_Controller{
...
}