我想使用下面的代码作为辅助函数,因为它将从我的应用程序中的几个控制器调用。
正如您所看到的,这是一个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