Spec-Zone.ru › CodeIgniter 3

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

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

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/general/ancillary_classes.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API