用户
 找回密码
 入住 CI 中国社区
搜索
12
返回列表 发新帖
楼主: suruibuas
收起左侧

[已解决] CI新手请教关于重复调用的问题。

[复制链接]
发表于 2010-6-20 18:05:31 | 显示全部楼层
helper 顾名思义是辅助的函数,不建议在 helper 里做应用流程控制,这个应该是控制器的职责。
建议楼主深入理解一下 MVC 各部分的职责。
发表于 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!

本版积分规则