我想使用下面的代码作为辅助函数,因为它将从我的应用程序中的几个控制器调用。
正如您所看到的,这是一个将文本发布到用户的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
处于自动加载状态。
任何想法我在这里做错了什么?提前谢谢。
答案 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