Не можете найти способ сделать это, возможно, потому что есть другой способ сделать это?
Некоторые из моих контроллеров расширяют 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.
Посмотрите на примеры библиотеки: