是否有任何方法可以根据会话数据在CI中进行路由。
例如:
CI
|-controllers
| |------student
| | |--dashboard.php
| | |--marks.php
| |
| |------teacher
| | |--dashboard.php
| | |--marks.php
|...
这样
if ($this->session->userdata('type') == 'student')
http://localhost/CI/dashboard
将在控制器/学生/仪表板上路由
else if($this->session->userdata('type') == 'teacher')
http://localhost/CI/dashboard
将在控制器/教师/仪表板上路由
答案 0 :(得分:0)
如果文件夹结构完全相同(如Q中所述),并且您不需要用户查看他所在的部分(教师 /仪表板,学生 /仪表板),根本不需要任何路由。
使用您提供的逻辑,只需加载不同的视图
例如。制作功能
function _render( $view_file = 'dashboard', $data ) {
if ($this->session->userdata('type') == 'student') {
$this->load->view('/student/'. $view_file, $data);
} else {
$this->load->view('/teacher/'. $view_file, $data);
}
}
注意:你的控制器上方的aproach将会很长,因为你必须拥有教师/学生的功能,只需区分视图文件
如果您想确保您的网址类似于/ teacher / dashboard ...和student / dashboard
我会选择这个方法
使用此tutorial扩展CI_Controller。
并在构造函数中确保您重定向到您想要的地方 go 重定向类似
(在 MY_Controller.php 中)
function __construct() {
parent::__construct();
if ($this->uri->segment(1) === FALSE) {//segment 'teacher' or 'student' doesnt exists
if ($this->session->userdata('type') == 'student') {
redirect('/student/dashboard');
} else if($this->session->userdata('type') == 'teacher') {
redirect('/teacher/dashboard');
} else {
//default action
}
} else {
if ($this->uri->segment(1) != $this->session->userdata('type')) {
//something is not right, session do not match the segment
//logout or redirect to right segment
redirect($this->session->userdata('type').'/dashboard');
}
//else is not needed code continues no redirects are needed
}
}