Создание вспомагательных классов

    В некоторых случаях может потребоваться разработать классы, которые существуют отдельно от ваших контроллеров, но есть возможность использовать их вместе с ресурсами CodeIgniter. Вы увидите как просто это сделать.

    get_instance()

    get_instance()
    Возвращает:Ссылку на контроллер
    Возвращаемый тип:CI_Controller

    Любой класс, которому припысывается значение внутри методов контроллера, может иметь доступ к родным ресурсам CodeIgniter просто используя get_instance() функцию. Эта функция возвращает соновной объект CodeIgniter.

    Обычно, для вызова доступных методов CodeIgniter необходимо использовать $this конструкцию:

    $this->load->helper('url');
    $this->load->library('session');
    $this->config->item('base_url');
    // etc.
    

    $this, обычно, работает только внутри ваших контроллеров, моделей или видов. Если хотите использовать классы CodeIgniter внутри своих классов сделайте следующее:

    Сначала, присвоим переменной объект CodeIgniter:

    $CI =& get_instance();
    

    После присвоения объекта переменной, используйте эту переменную вместо $this:

    $CI =& get_instance();
    
    $CI->load->helper('url');
    $CI->load->library('session');
    $CI->config->item('base_url');
    // etc.
    

    Если Вы собираетесь использовать get_instance() внутри другого класса, лучше будет присвоить ее к свойству. В этом случае, Вам не придется вызывать get_instance() в каждом отдельном методе.

    Пример:

    class Example {
    
    	protected $CI;
    
    	// We'll use a constructor, as you can't directly call a function
    	// from a property definition.
    	public function __construct()
    	{
    		// Assign the CodeIgniter super-object
    		$this->CI =& get_instance();
    	}
    
    	public function foo()
    	{
    		$this->CI->load->helper('url');
    		redirect();
    	}
    
    	public function bar()
    	{
    		$this->CI->config->item('base_url');
    	}
    }
    

    В примере выше, оба метода foo() и bar() будут работать после инициализации Example класса, без необходимости вызывать get_instance() в каждом из них.