我正在使用CodeIgniter建立一个网站,直到现在情况一直很好。然而,最近我的一个控制器的尺寸一直在增长。我想将控制器拆分为子文件夹中的单独文件。现在我有以下......
/controller/dashboard.php
在该控制器中,我有一个不同部分的功能。我检查运行检查以查看用户组是否具有某个部分的权限...等。所以,URL可能是这样的......
/仪表板/页/添加
我知道我可以设置一个子文件夹,并让我的网址如下....
/仪表板/人员/页/添加
但是,如果可能的话,我想省略'usergroup'。我想通过以下方式做到这一点......
/ controllers / dashboard / - >如果工作人员加载staff.php,如果用户加载user.php ......等等。
我也不能做以下...... ....
$这 - >负载>控制器();
您如何建议我设置仪表板区域?每个用户组都有不同的访问权限。将所有内容放在一个文档中的时间太长,将它们分开意味着我必须将用户组放在URL中...令人讨厌。
是否可以在routes.php中运行检查?
if ($this->user_model->is_user()) {
// load this controller
}
希望你们能为我提供一些想法!
谢谢, 雅各布
答案 0 :(得分:1)
嗯,快速而肮脏的解决方案可能会在主控制器中使用重定向......
在controller /:
中创建“仪表板”控制器class Dashboard extends CI_Controller {
function index()
{
//make a check for the user that returns the usergroup:
$user = $this->user_model->is_user();
redirect('controller/'.$user.'/'.$user);
}
}
基本上每当管理员转到http://www.mysite.com/index.php/dashboard时,它只会重定向到文件夹控制器内的相应用户控制器。因此,如果您的支票返回“工作人员”,它将重定向到controller/staff/staff.php
,依此类推..
据我所知,你不能在路由器配置中使用这样的自定义表达式。
另一种可能的解决方案是使用hooks。你可以使用pre_controller hook
pre_controller在任何控制器之前立即调用 被召唤。已经进行了所有基类,路由和安全检查 完成。
像
这样的东西$hook['pre_controller'][] = array(
'class' => 'Select',
'function' => 'get_usergroup',
'filename' => 'Select.php',
'filepath' => 'hooks');
然后使用get_usergroup()方法在application / hooks文件夹中创建一个Select.php类文件,该方法从会话或模型中获取用户组并执行所需的重定向。