我有一个事件控制器:
class Event extends CI_Controller{
public function index(){
}
public function foo(){
}
//Shouldn't be able to use this method unless logged in
public function bar(){
}
}
我正在尝试组织我的代码,因此它非常整洁和直接。刚才我有一个名为MY_Controller的控制器,这样只有经过身份验证的用户才能访问扩展它的任何控制器的方法(edit_event(),add_event())。
但是,我的控制器中的某些方法需要由未经身份验证的用户访问(例如get_event())。
处理此问题的好方法是什么?我应该创建两个完全独立的控制器,还是从基本事件控制器扩展并添加经过验证的方法?
以前我有一个管理器控制器,它处理所有需要身份验证的方法,例如add_user,delete_user,add_doc,delete_doc。但它变得非常快速印迹,并且不容易更新或修改控制器(加上它很乱,似乎没有遵循良好的编程礼仪)。
答案 0 :(得分:0)
通常我使用hooks
了解他们。
例如我创建了一个url_hook.php,如果用户允许uri,它会在每次页面加载时控制:
class url_hook{
function allowed_urls(){
$allow = array('login','logout','search');
if(in_array($allow,$this->uri->segment(2)) && $this->session->userdata('user_id')){
//ok user allowed
return true;
}else{
//user not allowed
redirect();
} } }
然后在config/config.php
我做:
$config['enable_hooks'] = TRUE;
并在config/hooks.php
像这样的somenthing:
$hook['pre_controller'][] = array(
'class' => 'url_hook',
'function' => 'allowed_urls',
'filename' => 'url_hook.php',
'filepath' => 'hooks'
);
每次在您的应用中调用网址时,所有这些都会自动运行