Код Igniter 2: Как продлить CI_Controller несколько раз?

Я успешно расширил класс CI_Controller, создав MY_Controller.php, который я разместил в каталоге application / core.

core / My_Controller.php выглядит примерно так:

class MY_Controller extends CI_Controller { function __construct() { parent::__construct(); } } 

Затем, когда я создаю обычные контроллеры, они выглядят примерно так:

 class Home extends MY_Controller { function __construct() { parent::__construct(); } function index() { $this->load->view('home'); } } 

Я создаю конец админки, и я хочу иметь другой базовый класс для расширения контроллеров вместо My_Controller. Это значит, что у меня могут быть общие методы для админ-контроллеров (например, authentication_check и т. Д.),

Я не могу решить, как создать другой контроллер, который расширяет CI_Controller.

Цель состоит в том, чтобы контроллеры админов расширили другой базовый класс, чем интерфейсные контроллеры.

Контроллер базы данных администратора будет выглядеть так:

 class MY_Admin_Controller extends CI_Controller { function __construct() { parent::__construct(); } } 

Обычный контроллер для страниц администрирования:

 class Admin_home extends MY_Admin_Controller { function __construct() { parent::__construct(); } function index() { $this->load->view('admin_home'); } } 

Проблема в том, что для расширения класса CI_Controller вы должны назвать свой файл контроллера PREFIX_Controller.php и поместить его в каталог core /. Но я хочу два класса контроллера, и они не могут иметь одинаковое имя файла.

Solutions Collecting From Web of "Код Igniter 2: Как продлить CI_Controller несколько раз?"

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

У нас просто есть как администратор, так и обычный расширенный контроллер в файле MY_Controller.php , отлично работает.

Основная причина для MY_Controller или других расширенных файлов заключается в том, что CodeIgniter auto инициирует их при загрузке базового файла (будь то библиотека, помощник и т. Д.), Вы можете иметь много классов в этих файлах.

Редактировать:

Вам даже не нужно называть их MY_Admin_Controller или MY_Controller , у нас есть Admin_Controller и User_Controller и Ajax_Controller в файле MY_Controller

То, что вы делаете, правильно. Вам просто нужны все эти файлы в каталоге application/core . Вот сообщение от Phil Sturgeon относительно этого:

http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY
http://philsturgeon.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY/

Хитрость заключается в использовании функции __autoload() которую Фил описывает в своем посте.

Это довольно легко. Выполните следующие действия:

  1. Перейдите в следующий каталог: your_ci_app/application/core/ и создайте php-файл с именем MY_Controller.php (этот файл будет содержать ваши MY_Controller.php родительские классы)
  2. Откройте этот файл, который вы только что создали, и добавьте несколько классов, например:

     class Admin_Parent extends CI_Controller { public function __construct() { parent::__construct(); } public function test() { var_dump("from Admin_Parent"); } } class User_Parent extends CI_Controller { public function __construct() { parent::__construct(); } public function test(){ var_dump("from User_Parent"); } } 
  3. Создайте дочерние контроллеры в этом каталоге your_ci_app/application/controllers/ . Я назову его adminchild.php

  4. Откройте adminchild.php и создайте свой код контроллера, убедитесь, что расширили имя родительского класса, например:

     class Adminchild extends Admin_Parent { function __construct() { parent::__construct(); } function test() { parent::test(); } } 

если вы хотите расширить другой класс вместо CI_controller, вы должны включить целевой класс. например

 include 'auth.php'; class test extends Auth