CodeIgniter - 将控制器组织到子文件夹中

时间:2011-11-08 05:31:36

标签: codeigniter

我正在使用CodeIgniter建立一个网站,直到现在情况一直很好。然而,最近我的一个控制器的尺寸一直在增长。我想将控制器拆分为子文件夹中的单独文件。现在我有以下......

/controller/dashboard.php

在该控制器中,我有一个不同部分的功能。我检查运行检查以查看用户组是否具有某个部分的权限...等。所以,URL可能是这样的......

/仪表板/页/添加

我知道我可以设置一个子文件夹,并让我的网址如下....

/仪表板/人员/页/添加

但是,如果可能的话,我想省略'usergroup'。我想通过以下方式做到这一点......

/ controllers / dashboard / - >如果工作人员加载staff.php,如果用户加载user.php ......等等。

我也不能做以下...... ....

$这 - >负载>控制器();

您如何建议我设置仪表板区域?每个用户组都有不同的访问权限。将所有内容放在一个文档中的时间太长,将它们分开意味着我必须将用户组放在URL中...令人讨厌。

是否可以在routes.php中运行检查?

if ($this->user_model->is_user()) {
  // load this controller
}

希望你们能为我提供一些想法!

谢谢, 雅各布

1 个答案:

答案 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类文件,该方法从会话或模型中获取用户组并执行所需的重定向。