Пользовательская библиотека codeigniter не загружается

Я новичок в codeigniter и пытаюсь создать пользовательскую библиотеку, которую я написал для загрузки. Я установил CI для запуска веб-сайта с помощью контроллера с именем «check_login». Содержимое этого файла следующее:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Check_login extends CI_Controller {
    public function __construct (){
        parent::__construct();
        $this->load->library('check_login');
    }

    function index (){
        $this->check_login->checker();
    }
}

Библиотека check_login помещена в CI/application/libraries/ и содержит следующий скрипт:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Check_Login {
    public function cheker (){
        //$CI =& get_instance();
        $is_logged_in = $this->session->userdata('is_logged_in');
        if(!isset($is_logged_in) || $is_logged_in != true){
            $this->load->view('welcome_message');
        }      
    }

}

Я также пытался использовать $CI =& get_instance(); вместо $this, а также пытался добавить имя библиотеки в файл autoload config, чтобы проверить, работает ли он. Результат, который отображается в браузере, выглядит следующим образом: Вывод в виде изображения Я хотел бы знать что заставляет мою библиотеку не загружаться, и когда я должен использовать get_instance(); вместо $this. Заранее большое спасибо.


person Tower    schedule 28.04.2016    source источник
comment
Я также просмотрел ссылку ниже, но ничего не могу понять: stackoverflow.com/questions/20250061/   -  person Tower    schedule 28.04.2016
comment
вы не можете загрузить представление в библиотеке из библиотеки, просто верните $is_logged_in и используйте это, если обдумываете в своем контроллере.   -  person Yaseen Ahmad    schedule 28.04.2016
comment
Не уверен, что это может помочь, но ваш контроллер и библиотека имеют одно и то же имя. Вы пытались изменить имя своего контроллера? Может запутать систему при попытке загрузить эти классы   -  person Jonathan Chow    schedule 28.04.2016
comment
И ваша функция называется cheker вместо checker...   -  person Jonathan Chow    schedule 28.04.2016
comment
Благодаря вашим руководствам я больше не получаю никаких ошибок, но в результате получается пустая страница. Не могли бы вы рассказать мне, как передать $is_logged_in в контроллер?   -  person Tower    schedule 28.04.2016
comment
просто используйте return $is_logged_in;   -  person Yaseen Ahmad    schedule 28.04.2016
comment
Дорогая Ясин, я знаю, что это раздражает, но я нигде не могу найти это. Я не знаю, как использовать возвращенные данные в контроллере? ни он не повторяется, ни print_r бесполезен.   -  person Tower    schedule 28.04.2016
comment
позвольте мне привести пример этого кода в вашем контроллере. $result = $this-›библиотека-›example_function(); эхо $результат; этот код в вашей библиотеке. публичная функция example_function(){ return 123123; } попробуйте, вы поймете, о чем я прошу.   -  person Yaseen Ahmad    schedule 28.04.2016
comment
Вы не можете иметь контроллер и библиотеку с одинаковым именем. Измените одно имя файла/класса и попробуйте.   -  person Tpojka    schedule 28.04.2016


Ответы (2)


Похоже, я очень мало знаю о PHP. Я вызывал библиотеку, не присваивая ее значение в переменной. Поэтому в индексной функции контроллера я должен изменить команду на: $q = $this->check_login->checker();echo $q;

person Tower    schedule 28.04.2016

Просто измените имя класса на Check_login или что-то другое в нижнем регистре. И вы вызываете $this->check_login->checker();, где, как и в вашей библиотеке, ваше имя функции cheker()

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Check_login {
    public function __construct()
    {
        $CI =& get_instance();   
    }
    public function cheker ()
    {
        $is_logged_in = $this->session->userdata('is_logged_in');
        if(!isset($is_logged_in) || $is_logged_in != true){
            $this->load->view('welcome_message');
    }      
}

Почему $CI =& get_instance(); Назначение по ссылке позволяет использовать исходный объект CodeIgniter, а не создавать его копию.

person Vinie    schedule 28.04.2016