Загрузить библиотеку в модели в CodeIgniter - PullRequest
13 голосов
/ 02 марта 2010

Почему моя модель не загружает библиотеку шифрования?

class User_model extends Model {

  function User_model() {
    parent::Model();
    $this->check_login();
  }

  function check_login() {
    $this->load->library('encrypt');
    $email = $this->encrypt->decode($email);
    ....
  }
}

Это дает мне ошибку PHP: вызов функции-члена decode () для необъекта в строке X - где X - это $ this-> encrypt-> decode ($ email); линия

Отредактировано, чтобы показать, что проблема была в том, что check_login был вызван из конструктора

Ответы [ 6 ]

22 голосов
/ 03 марта 2010

Вам не нужно загружать библиотеку в МОДЕЛИ, МОДЕЛИ всегда вызываются из КОНТРОЛЛЕРОВ, поэтому вам просто нужно загрузить библиотеки в Контроллере, и функции будут доступны в моделях, вызванных из него! *

С уважением,
Pedro

5 голосов
/ 04 марта 2010

Библиотеки должны автоматически назначаться экземпляру модели, чтобы он работал нормально.

Помните, что если вы не можете получить доступ к суперглобальному, вы всегда можете использовать $ ci = & get_instance (), чтобы захватить его без дополнительной платы в вашей памяти.

Но все же ... ваш пример кода должен работать>. <</p>

5 голосов
/ 02 марта 2010

Я вызывал check_login из конструктора, и это вызывало проблемы.

Решение состоит в том, чтобы вызвать $this->_assign_libraries(); сразу после загрузки библиотеки в конструкторе.

Благодаря этой ветке форума codeignitor: http://codeigniter.com/forums/viewthread/145537/

2 голосов
/ 04 марта 2013

Я перепробовал многие из них, но, в конце концов, я сделал это в модели:

$this->load->library('mylib');
$mylib= new Mylib();
$mylib->somemethod();

Это работает для меня.

0 голосов
/ 13 февраля 2014

Я также столкнулся с проблемой, касающейся API Facebook, затем я попытался сделать требуемый_once файл библиотеки Facebook в модели у меня это сработало.

require_once "application / library / facebook.php"; затем сделайте его объект, если вам нужно.

0 голосов
/ 08 марта 2013

вы можете изменить имя объекта для библиотеки, которую вы загружаете потому что CI также получил класс шифрования

просто сделай

$this->load->library('encrypt',NULL,'myencryptobj');
$this->myencryptobj->yourfunction();

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...