Php 将函数传递到CodeIgniter中的视图?

Php 将函数传递到CodeIgniter中的视图?,php,function,codeigniter,Php,Function,Codeigniter,我可以在CodeIgniter中将函数传递给视图吗?该函数主要检查会话值是否已设置。例如: public function is_logged(){ $logged = $this->session->userdata('user_id'); if ($logged){ return true; } else { redirect('index'); } } 现在我想把这个函数放在我的一些视图上。那么,如何将此函数传

我可以在CodeIgniter中将函数传递给视图吗?该函数主要检查会话值是否已设置。例如:

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

    if ($logged){
        return true;
    } else {
        redirect('index');
    }
}
现在我想把这个函数放在我的一些视图上。那么,如何将此函数传递给视图?
谢谢。

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


你也可以创建一个助手:

我会采取一种不同的方法,就像@atno所说的:你使用的是MVC模式,所以在你的视图中进行这种检查是“逻辑上”错误的,而且不符合干式方法

我将使用模型中的功能执行签入控制器,并根据结果加载适当的视图:

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->session返回的内容:

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');
}

}

您不需要在视图中传递它,CI使用MVC模式,因此所有检查都必须在控制器中完成。请注意,
$this->session->userdata('user_id')返回
false
因此
isset($logged)
将始终返回true谢谢。只是一个问题,控制器中不应该有记录功能吗?因为它只是检查会话是否有一个值user\u id。它不与数据库交互。(如果我理解正确,在模型中,我们有与数据库交互的功能)?谢谢。@Roman好吧,我会把它放在一个模型中,只是为了避免反复重复。。无论如何,考虑到函数的简洁性,你也可以编写
if($this->session->userdata('user_id'){//加载一个视图}或者{//加载另一个视图}
哪一种可能更好。顺便说一句,模型不仅仅用于数据库,通常任何数据处理都可以放在那里