我有一些功能可以管理控制器文件中某些控制器的访问级别。
我决定将它们带到图书馆或帮助者那里。
由于他们大多是程序性的,所以我决定使用帮手。
这是控制器文件中的原始方法(其他是access_level_member,access_level_moderator等)
function access_level_admin() {
if (!$this->session->userdata('loggedin')) {
$this->session->set_flashdata('warning', 'Not logged in.');
redirect('/start_page', 'refresh');
}
if (!$this->session->userdata('admin')) {
$this->session->set_flashdata('warning', 'Access Denied!');
redirect('/start_page', 'refresh');
}
这是帮助者。
function access_level_admin() {
$CI =& get_instance();
if (!$CI->session->userdata('loggedin')) {
$CI->session->set_flashdata('warning', 'Not logged in.');
redirect('/start_page', 'refresh');
}
if (!$CI->session->userdata('admin')) {
$CI->session->set_flashdata('warning', 'Access Denied!');
redirect('/start_page', 'refresh');
}
所以我的问题是,将它放在库或帮助器中是否更好?是否可以使用$ CI =& get_instance();帮助者。
有更好的想法或建议吗?
答案 0 :(得分:3)
我会将逻辑放在父控制器中并让控制器扩展它。
class Authenticated_Controller extends CI_Controller {
public function __construct() {
parent::__construct();
if (!$this->session->userdata('loggedin')) {
$this->session->set_flashdata('warning', 'Not logged in.');
redirect('/start_page', 'refresh');
}
}
class Admin_Controller extends Authenticated_Controller {
public function __construct() {
parent::__construct();
if (!$this->session->userdata('admin')) {
$this->session->set_flashdata('warning', 'Access Denied!');
redirect('/start_page', 'refresh');
}
}