CodeIgniter расширяет несколько контроллеров?

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

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

class Profile extends AdminLayout, LoggedIn { 

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

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

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

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

 <?php if (!defined('BASEPATH')) exit('No direct script access allowed'); /** * MY_Controller Class * * * @package Project Name * @subpackage Controllers */ class MY_Controller extends CI_Controller { public function __construct() { parent::__construct(); $this->form_validation->set_error_delimiters('<div class="form-error">', '</div>'); } } class LoggedIn extends MY_Controller { 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 AdminLayout extends LoggedIn { public function __construct() { parent::__construct(); // do something } } class ModLayout extends LoggedIn { public function __construct() { parent::__construct(); // do something } } /* End of file */ /* Location: ./application/core/ */ 

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

 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'); } } } 

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

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

http://codeigniter.com/wiki/Simplelogin