CodeIgniter расширяет несколько контроллеров? - PullRequest
7 голосов
/ 29 февраля 2012

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

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

class Profile extends AdminLayout, LoggedIn {

Тем не менее, заглянуть в это невозможно.Есть ли обходной путь?

Ответы [ 2 ]

25 голосов
/ 29 февраля 2012

Предполагая, что вы используете 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');
        }
    }
}
2 голосов
/ 29 февраля 2012

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

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

http://codeigniter.com/wiki/Simplelogin

...