codeigniter3控制器到控制器功能

时间:2017-01-10 23:57:30

标签: codeigniter controller views

好的,我有页面控制器和user_authenticator控制器。

页面控制器就像我的视图的终端,而user_authenticator控制器执行与注册/登录等用户相关的功能。

每当我完成user_authenticator中的某个功能时,例如登录,如何通过页面控制器加载视图?

登录 - > USER_AUTH(控制器) - > acc_model(模型) - > USER_AUTH(控制器) - >图

登录 - > user_auth-> acc_model->页(控制器) - >图

如果你们能告诉我,我所做的事情是不切实际的,也是更好的做事方式,对我来说将是一件福音。或者我应该坚持在我以前使用的控制器上加载视图。

编辑:所以我可能已经忘记了我的页面控制器的目的,但我记得因为我的模糊和疲惫的心灵清晰的一刻。

我创建了一个页面控制器,仅用于加载视图,我想在某种意义上,页面不会加载所有视图但至少包含大多数视图,例如,如果我的视图中有链接到其他视图,我会通过页面链接它们。

对于需要特定控制器的特定功能,我想我可以让他们处理加载一些视图。

然后,如果有人能告诉我我在做什么是浪费时间,应该删除页面控制器,请告诉我,我想知道原因。

如果您对我的页面控制器的进一步使用有任何建议,那就太棒了!

关于会话。我有一个基本控制器。

    <?php
class MY_Controller extends CI_Controller {
    public function __construct()
    {
        parent::__construct();
    }

    public function is_logged_in($data){    
        $session = $this->session->userdata();
        if($session['isloggedin']['username'] == ''){ 
        return isset($session); 
        }else{ 
        return FALSE;}  
    }
}
?>

如果有任何会话设置,如何使其自动运行并检查我加载的每个控制器?

我必须将它放入构造函数中吗?或者我是否必须从所有控制器调用基本控制器方法?

1 个答案:

答案 0 :(得分:0)

这是您的最佳解决方案 你可以使用挂钩
第一步:
应用/配置/ config.php中

    $config['enable_hooks'] = TRUE;//enable hook

步骤2:
应用/配置/ hooks.php

    $is_logged_in= array();
    $is_logged_in['class'] = '';
    $is_logged_in['function'] = 'is_logged_in';//which function will be executed
    $is_logged_in['filename'] = 'is_logged_in.php';//hook file name
    $is_logged_in['filepath'] = 'hooks';//path.. default
    $is_logged_in['params'] = array();
    $hook['post_controller_constructor'][] = $is_logged_in;//here we decare a hook . 
    //the hook will be executed after CI_Controller construct. 
    //(also u can execute it at other time , see the CI document)

第三步: application / hooks / is_logged_in.php //你贬低了什么

    <?php
    //this function will be called after CI controller construct!
    function is_logged_in(){
        $ci =& get_instance();//here we get the CI super object    
        $session = $ci->session->userdata();//get session
        if($session['isloggedin']){ //if is logged in = true
             $ci->username = 'mike';//do what you want just like in controller.
             //but use $ci instead of $this**
        }else{ 
            //if not loggedin .do anything you want
            redirect('login');//go to login page.
        }  
    }

步骤4:应用/控制器/ pages.php

    <?php
    class pages extends CI_Controller{
        function construct ........
        function index(){
            echo $this->username;//it will output 'Mike', what u declared in hook
        }
    }

希望它会对你有所帮助。