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

В некоторых случаях может потребоваться разработать классы, которые существуют отдельно от ваших контроллеров, но есть возможность использовать их вместе с ресурсами 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() в каждом из них.