Codeigniter Helper函数返回错误


Codeigniter Helper function returning error

我想使用下面的代码作为辅助函数,因为它将从我的应用程序中的几个控制器调用。

正如您所看到的,这是一个PHP curl,用于将文本发布到用户的Facebook墙上。

} elseif ($this->input->post('post_facebook')) { //"post to facebook" checkbox is ticked
        $this->load->model('facebook_model');
        $token = $this->facebook_model->get_facebook_cookie();
        $attachment =  array(
            'access_token'  => $token['access_token'],
            'message'       => $post['posts_text'],
        );
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,'https://graph.facebook.com/' . $token['uid'] . '/feed');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  //to suppress the curl output
        $result = curl_exec($ch);
        curl_close($ch);

此代码在控制器中运行时非常完美。但我想做这样的事情:

将其放入helpers/functions_helper.php:

function post_facebook_wall($post) {
    $this->load->model('facebook_model');
    $token = $this->facebook_model->get_facebook_cookie();
    $attachment =  array(
        'access_token'  => $token['access_token'],
        'message'       => $post['posts_text'],
    );
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,'https://graph.facebook.com/' . $token['uid'] . '/feed');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  //to suppress the curl output
    $result = curl_exec($ch);
    curl_close($ch);        }

然后在我的控制器中:

...
} elseif ($this->input->post('post_facebook')) { //post to facebook checkbox is ticked
    $post = array('posts_text' => 'sample text');
    post_facebook_wall($post);
}

不幸的是,这不起作用,我得到了一个500错误。

functions_helper.php处于自动加载状态。

你知道我在这里做错了什么吗?提前谢谢。

辅助程序是一个带有函数的文件,而不是一个类。但是在助手中,您不能像Codeigniter的其他部分那样加载模型和库。为了做到这一点,您需要创建一个主类的实例

这是您的助手functions_helper.php,位于application/helpers/:中

   If ( ! defined('BASEPATH')) exit('No direct script access allowed');
   If ( ! function_exists('post_facebook_wall'))
   {
      function post_facebook_wall($post) {
        $CI =& get_instance();   //instantiate CodeIngiter main class
        //now you can call your models:
        $CI->load->model('facebook_model');
        $token = $CI->facebook_model->get_facebook_cookie();
        $attachment =  array(
        'access_token'  => $token['access_token'],
        'message'       => $post['posts_text'] );
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,'https://graph.facebook.com/' . $token['uid'] . '/feed');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $attachment);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  //to suppress the curl output
        $result = curl_exec($ch);
        curl_close($ch);
    }

在您的控制器、模型或视图中,您现在必须加载您的自定义助手(或将其放置在application/config/autoload.php $autoload['helper'] = array('functions_helper')中的自动加载器阵列中;),

   $this->load->helper('functions_helper');

现在你可以用通常的方式访问你的功能,

$this->functions_helper->post_facebook_wall($post)

您不能在函数内部引用$this(阅读OOP)

使用get_instance()获取对控制器对象的引用,类似于:

$obj = get_instance();
$obj->load->model('facebook_model');
// etc