Giả sử rằng bạn đang sử dụng CodeIgniter 2, điều này có thể được thực hiện bằng cách đặt tất cả các bạn lớp điều khiển mở rộng trong cùng một tập tin.
Trong /application/lõi tạo ra một tập tin gọi là MY_Controller.php (đừng quên kiểm tra tiền tố phân lớp trong config.php xung quanh dòng 109)
Tại đây bạn có thể thêm tất cả bạn điều khiển các lớp để mở rộng. Ví dụ;
<?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/ */
Sau đó, khi bạn tạo bộ điều khiển như bình thường, chỉ cần chọn lớp bộ điều khiển cơ sở để mở rộng. Thí dụ;
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');
}
}
}
hoặc
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');
}
}
}
Ít nhất 'chức năng LoggedIn' của bạn nên được đặt ở tầng dịch vụ, không phải ở lớp điều khiển. – Flavius