【问题标题】:CodeIgniter - Organizing Controllers into SubfoldersCodeIgniter - 将控制器组织到子文件夹中
【发布时间】:2011-11-08 05:31:35
【问题描述】:

我正在使用 CodeIgniter 构建一个网站,到目前为止,一切都进展顺利。然而,最近我的一个控制器的尺寸一直在增长。我想将控制器拆分为子文件夹中的单独文件。现在我有以下....

/controller/dashboard.php

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

/dashboard/pages/添加

我知道我可以设置一个子文件夹并让我的 URL 如下所示......

/dashboard/staff/pages/添加

但是,如果可能的话,我想省略“用户组”。我想通过以下方式做到这一点......

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

我也无法做到以下几点......

$this->load->controller();

您建议我如何设置仪表板区域?每个用户组都有不同的需要访问的东西。将所有内容放在一个文档中会变得太长,并且将它们分开意味着我必须将用户组放在 URL 中......很糟糕。

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

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

希望你们能给我一些想法!

谢谢, 雅各布

【问题讨论】:

    标签: codeigniter


    【解决方案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 挂钩

    pre_controller 在您的任何控制器之前立即调用 被调用。所有基类、路由和安全检查都已 完成。

    类似

    $hook['pre_controller'][] = array(
                                    'class'    => 'Select',
                                    'function' => 'get_usergroup',
                                    'filename' => 'Select.php',
                                    'filepath' => 'hooks');
    

    然后您在 application/hooks 文件夹中创建一个 Select.php 类文件,使用方法 get_usergroup() 从会话或模型中获取用户组并执行所需的重定向。

    【讨论】:

      猜你喜欢
      • 2012-12-28
      • 2015-12-11
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      • 2013-09-16
      相关资源
      最近更新 更多