【问题标题】:Hide Codeigniter controller name from URL with same routes从具有相同路由的 URL 中隐藏 Codeigniter 控制器名称
【发布时间】:2012-11-01 07:17:18
【问题描述】:

我刚刚开始使用 codeigniter,我想使用相同的路由设置从 URL 中隐藏控制器名称。

我有 3 个控制器,分别是学生、教职员工、教师,它们具有相同的功能,称为 home,这显然不起作用

$route['home'] = 'students/home';
$route['home'] = 'staff/home';

有没有办法做到这一点?我有使用包含用户类型的 codeigniter 会话类的会话数据,所以我尝试了类似的方法

session_start()    
$route['home'] = $_SESSION['user_type'].'/home';

但我无法获取会话数据,也许它使用 codeigniter 会话类?那么,我怎样才能得到数据?还是有其他解决方案?

【问题讨论】:

  • 你的网址是什么?据我所知,您正在尝试将/home 路由到多个控制器/方法,这是不可能的。 (除非你有一个自己做路由逻辑的方法。)
  • localhost/ci_project/students/home, ../staff/home,我用控制器处理每个用户类型,每个用户都有 home 功能。我可以动态地做吗?
  • 可能有一种动态的方法,但我不确定 CodeIgniter 是否能很好地使用它。例如,您可以基于字符串对其进行load the classcall a method
  • 好的,试试看..感谢您的解决方案

标签: php codeigniter controller routes


【解决方案1】:

也许您应该编写一个通用控制器并通过您的第二个 URI 参数进行分散:

家庭/学生或家庭/员工

$route['home/:any'] = "home";

和家庭控制器的索引方法:

public function index()
{
    $type = $this->uri->segment(2);
    switch($type){
        case "student":
            $this->student();
        break;
        case "staff":
            $this->staff();
        break;
        default:
            $this->some_other_method();
        break;
    }
}

显然,如果需要,您会创建一个学生和教职员工方法并以不同方式处理事情。

附注 - 为什么要隐藏控制器的名称?这不像是安全漏洞或其他任何东西。

【讨论】:

  • 谢谢,我明白了.. 好吧,我在一个控制器中有大约 6 个方法,我有 4 个控制器.. 哦,我还有更多工作要做.. 嗯,我一直在请求隐藏用户类型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-07
相关资源
最近更新 更多