我可以将函数传递给CodeIgniter中的视图吗?该函数基本上检查是否设置了会话值。例如:
public function is_logged(){
$logged = $this->session->userdata('user_id');
if ($logged){
return true;
} else {
redirect('index');
}
}
现在我想把这个功能放在我的一些视图上。那我怎么能把这个功能传递给视图呢? 感谢。
答案 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