#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