7

Не можете найти способ сделать это, возможно, потому что есть другой способ сделать это?CodeIgniter расширяет несколько контроллеров?

Некоторые из моих контроллеров расширяют AdminLayout, а некоторые из них расширяют ModLayout, но мне также нужны эти страницы для расширения LoggedIn Controller.

class Profile extends AdminLayout, LoggedIn { 

Однако, если посмотреть, нет ли способа сделать это красиво. Есть ли обходной путь?

+0

По крайней мере, ваш 'функциональность LoggedIn' следует поместить на уровне сервиса, а не на уровне контроллера. – Flavius

ответ

2

PHP не поддерживает множественное наследование. Для этого вы можете использовать помощники или библиотеки Codeigniter.

Посмотрите на примеры библиотеки:

http://codeigniter.com/wiki/Simplelogin

25

Если предположить, что вы используете Codeigniter 2, это можно сделать, поставив все, что вам расширенные классы контроллеров в одном файле.

В /приложение/ядро ​​ создать файл с именем MY_Controller.php (не забудьте проверить префикс подкласса в config.php вокруг линии 109)

Здесь вы можете добавить все вы должны расширить классы контроллеров. Например;

Затем, когда вы создаете свои контроллеры в соответствии с нормальным, просто выберите базовый класс контроллера для расширения. Пример;

class Foo extends AdminLayout { 

    public function __construct() { 
     parent::__construct(); 
     if (is_logged_in() == FALSE) { 
      $this->session->set_userdata('return_to', uri_string()); 
      $this->session->set_flashdata('message', 'You need to log in.'); 
      redirect('/home'); 
     } 
    } 
} 

или

class Bar extends ModLayout { 

    public function __construct() { 
     parent::__construct(); 
     if (is_logged_in() == FALSE) { 
      $this->session->set_userdata('return_to', uri_string()); 
      $this->session->set_flashdata('message', 'You need to log in.'); 
      redirect('/home'); 
     } 
    } 
} 
Смежные вопросы