CodeIgniter 2:使用header()调用其他控制器是否可以?

时间:2013-06-14 09:10:49

标签: php http-headers codeigniter-2

我目前正在开发一个需要(主)管理员特定控件的网站。我有两个控制器,一个用于加载login页面,另一个用于加载edit_profile页面。在加载“编辑配置文件”页面之前,它会检查用户是否已登录。我这样做:

/* edit_profile.php */

<?php if(!$this->session->user_data('logged_in')) header ("Location: " . base_url('login')); ?>

我听说CI没有办法从另一个控制器调用控制器。可以这样调用其他控制器吗?编程错了吗?如果它是一个,还有另一种方式吗?

2 个答案:

答案 0 :(得分:0)

MVC旨在分离应用程序中职责的角色。所有演示文稿(包括标题)都应通过视图完成。这并不意味着标题重定向有任何问题,因为这是常见做法...安全网站?未登录?重定向。

根据登录控制器在显示视图(登录表单等)之前所执行的操作,您可能只能在未登录的情况下加载登录视图,如果登录则可以加载edit_profile视图。可能有很多方法可以解决这个问题,每个方法本身都是独一无二的。

你的建议会起作用,我不能老实说它有错误的。这恰好违背了MVC的设计原则。

答案 1 :(得分:0)

他呢?如果用户已登录,则从模型加载用户详细信息。

function login()
{
    if(!$this->session->user_data('logged_in'))
    {
        $data['msg'] = "Not logged in";
        $this->load->view('login_form',$data);

    } else {

        $data['user_details'] = // call to some sort of user model?     
        $this->load->view('edit_profile',$data);
    }           
}