Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter扩展多个控制器?_Php_Codeigniter_Inheritance_Out Of Memory_Multiple Inheritance - Fatal编程技术网

Php CodeIgniter扩展多个控制器?

Php CodeIgniter扩展多个控制器?,php,codeigniter,inheritance,out-of-memory,multiple-inheritance,Php,Codeigniter,Inheritance,Out Of Memory,Multiple Inheritance,找不到这样做的方法,可能是因为还有其他方法 我的一些控制器扩展AdminLayout,一些扩展ModLayout,但我还需要这些页面来扩展LoggedIn控制器 class Profile extends AdminLayout, LoggedIn { 然而,仔细研究并没有办法很好地做到这一点。有解决方法吗?PHP不支持多重继承。 您可以为此使用Codeigniter帮助程序或库 请查看库示例: 假设您使用的是Codeigniter 2,可以将所有扩展控制器类放在同一个文件中 在/applic

找不到这样做的方法,可能是因为还有其他方法

我的一些控制器扩展AdminLayout,一些扩展ModLayout,但我还需要这些页面来扩展LoggedIn控制器

class Profile extends AdminLayout, LoggedIn {

然而,仔细研究并没有办法很好地做到这一点。有解决方法吗?

PHP不支持多重继承。 您可以为此使用Codeigniter帮助程序或库

请查看库示例:


假设您使用的是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/ */


至少您的
LoggedIn
功能应该放在服务层,而不是控制器层。
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');
        }
    }
}