как мне расширить класс в codeigniter?

#codeigniter #class #controller #extends

#codeigniter #класс #контроллер #расширяет

Вопрос:

это мой контроллер: общий :

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

class Common extends CI_Controller {

    public function __construct() { 

        parent::__construct();

    }
    public function test(){
        echo 1;
    }

}
  

и это второй контроллер (регистр):

 class Register extends Common {

    public function __construct() { 

        parent::__construct();

    }
    public function user_registration(){
        $this->test();
    }
}
  

когда я обращаюсь к функции user_registration, она показывает мне эту ошибку:
Неустранимая ошибка: класс ‘Common’ не найден в /home/attilana/domains/attila-naghi.com/public_html/application/controllers/register.php в строке 3

Как мне получить доступ к функции test() из класса common в функции user_registration из класса register?

Ответ №1:

В Codeigniter вызов контроллера с другого контроллера даже в подобном примере невозможен из-за ситуации, когда он не допускает несколько экземпляров контроллера в запросе. Из-за этой ситуации у вас есть три основных варианта на самом деле.

Во-первых, вы можете расширить базовый контроллер Codeigniter CI_Controller с MY_ помощью префикса, чтобы Codeigniter распознал его как обычный базовый класс. Основная идея здесь заключается в написании методов, которые будут распространены в большинстве ваших контроллеров.

Если мы посмотрим на ваш пример и попытаемся адаптировать его, как упоминалось выше :

Первоначально вам необходимо расширить класс CI_Controller:

 class MY_Controller extends CI_Controller {

    public function __construct() { 
        parent::__construct();
    }

    public function test(){
        echo 1;
    }

}
  

Во-вторых, создайте свой контроллер регистра, как показано ниже:

 class Register extends MY_Controller {

    public function __construct() { 
        parent::__construct();
    }

    public function user_registration(){
        $this->test();
    }
}
  

Еще одна возможность заключается в том, что вы можете создать вспомогательную функцию и вызвать эту функцию глобально, или вы можете создать библиотеку, загрузить ее в свой контроллер и вызвать это.

Дополнительную информацию вы можете прочитать здесь: http://ellislab.com/codeigniter/user-guide/general/core_classes.html или из старых документов: https://github.com/EllisLab/CodeIgniter/wiki/MY-Controller