Php CodeIgniter扩展多个控制器?
找不到这样做的方法,可能是因为还有其他方法 我的一些控制器扩展AdminLayout,一些扩展ModLayout,但我还需要这些页面来扩展LoggedIn控制器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
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');
}
}
}