将函数传递给CodeIgniter中的视图?

时间:2011-06-21 07:19:09

标签: php function codeigniter

我可以将函数传递给CodeIgniter中的视图吗?该函数基本上检查是否设置了会话值。例如:

public function is_logged(){
    $logged = $this->session->userdata('user_id');

    if ($logged){
        return true;
    } else {
        redirect('index');
    }
}

现在我想把这个功能放在我的一些视图上。那我怎么能把这个功能传递给视图呢? 感谢。

2 个答案:

答案 0 :(得分:1)

我会采取不同的方法,就像@atno说的那样:你正在使用MVC模式,所以在你的视图中进行这种检查是“逻辑上的”错误以及违反DRY方法。

我会使用我在模型中的函数来检查控制器,并根据结果加载适当的视图:

class Mycontroller extends CI_Controller {

     function index() //just an example
     {
        $this->load->model('mymodel');  
        if($this->mymodel->is_logged())
        {
          $this->load->view('ok_page');
        }
        else
        {
          $this->load->view('not_logged_view');
          //OR redirect('another_page','refresh')
        }
    }
}

在你的模特中:

 function is_logged()
 {
    $logged = $this->session->userdata('user_id');

    if ($logged)
    {
        return TRUE;
    } else {
        return FALSE;
    }
 }

如果它需要以编程方式执行,对于控制器的每个方法(例如检查登录),您可以检查构造函数内部:

  function __construct()
  {
    parent::__construct();
    // check code here
  }

通过这种方式,您可以在调用控制器的任何方法之前进行检查,即在控制器初始化时。

<强>更新: 使用模型在这里可能有点过分,你可以查看$ this-&gt;会话返回的内容:

function index() { // or mypage() or whatever

if($this->session->user_data('user_id'))
{
  $this->load->view('ok_page');
}
else
{
  $this->load->view('not_ok_page');
}

}

答案 1 :(得分:0)

你不应该这样做。只需将此代码直接放在您的布局中,或者只是将其放在视图中即可。

你也可以创建一个帮手:http://codeigniter.com/user_guide/general/helpers.html