Codeigniter Helper函数返回错误

时间:2011-06-14 18:56:18

标签: php codeigniter helper

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

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

} 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处于自动加载状态。

任何想法我在这里做错了什么?提前谢谢。

2 个答案:

答案 0 :(得分:2)

帮助程序是具有函数的文件,而不是类。但是在帮助程序中,您无法像在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)

答案 1 :(得分:1)

你不能在函数内引用$ this(读取有关OOP)

使用get_instance()来获取对控制器对象的引用,例如:

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