|
发表于 2010-6-22 08:45:53
|
显示全部楼层
回复 1# suruibuas
1. 权限验证属于程序上下文逻辑,不应该写在View里面,按照CI的MVC结构应该写在Controller里面。为了尽可能的DRY(Don't Repeat Yourself),以减少重复代码,推荐你拓展CI默认的Controller类,比如MY_Controller,将验证逻辑写在构造函数中,然后在用到该验证的控制器中继承这个Controller即可。实际的例子,请看我写的Stblog程序(签名中有下载链接)。
./application/libraries/MY_Controller.php
PHP复制代码
/**
* STBLOG 后台父控制器
*
* 后台的所有控制器都需要继承这个类,主要包含验证
*
* @package STBLOG
* @subpackage Controller
* @category Controller
* @author Saturn <huyanggang@gmail.com>
* @link http://code.google.com/p/stblog/
*/
class ST_Auth_Controller extends Controller {
protected function __construct () {
parent ::Controller();
/** 加载验证库 */
$this->load->library('auth');
/** 检查登陆 */
if(!$this->auth->hasLogin())
{
redirect ('admin/login?ref='.urlencode($this->uri->uri_string()));
}
/** 加载后台控制器公共库 */
$this->load->library('form_validation');
$this->load->library('user');
/** 加载后台控制器公共模型 */
$this->load->model('users_mdl');
/** 加载后台控制器helper */
/** 后台管理页面,不使用皮肤 */
$this->load->switch_theme_off();
}
}
复制代码
具体要用到这个验证规则的类:
PHP复制代码
/**
* STBLOG Themes Class
*
* 本类用于Themes管理逻辑
*
* @package STBLOG
* @subpackage Controller
* @category Admin Controller
* @author Saturn <huyanggang@gmail.com>
* @link http://code.google.com/p/stblog/
*/
class Themes extends ST_Auth_Controller {
/**
* 传递到对应视图的数据
*
* @access private
* @var array
*/
private $_data = array();
复制代码
2. 你说的第二个问题,通过autoload.php和方法一都可以完美解决。仔细考虑下,解决之后,希望你能够回过头来对大家分享下你的方案。
Cheers! |
|