Ошибка функции Codeigniter Helper - PullRequest
0 голосов
/ 14 июня 2011

Я хотел бы использовать приведенный ниже код в качестве вспомогательной функции, поскольку он будет вызываться из нескольких контроллеров в моем приложении.

Как вы можете видеть, это PHP-локон для публикации текста на стене пользователя в 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 в автозагрузке.

Есть идеи, что я здесь делаю не так? Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 14 июня 2011

Помощник - это файл с функцией, а не класс.Но внутри помощника вы не можете загружать модели и библиотеки, как в остальной части 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 голос
/ 14 июня 2011

вы не можете ссылаться на $ this внутри функции (читайте об ООП)

используйте get_instance () для получения ссылки на объект контроллера, что-то вроде:

$obj = get_instance();
$obj->load->model('facebook_model');
// etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...