【问题标题】:How to get an array of all controllers in a Codeigniter project?如何在 Codeigniter 项目中获取所有控制器的数组?
【发布时间】:2010-05-09 11:32:57
【问题描述】:

我想获取 Codeiginiter 项目中所有控制器的列表,以便我可以轻松地遍历每个控制器并添加定义的路由。我似乎找不到一种方法可以满足我的需求?

这是我想访问数组的 routes.php 文件中的代码 sn-p:-

// I'd like $controllers to be dynamically populated by a method
//
$controllers = array('pages', 'users');

// Loop through each controller and add controller/action routes
//
foreach ($controllers as $controller) {
    $route[$controller] = $controller . '/index';
    $route[$controller . '/(.+)'] = $controller . '/$1';
}

// Any URL that doesn't have a / in it should be tried as an action against
// the pages controller
//
$route['([^\/]+)$'] = 'pages/$1';

更新 #1

解释一下我想要实现的目标。我有一个 Pages 控制器,其中包含诸如 about、contact-us、privacy 等页面。这些页面都应该可以通过 /about、/contact-us 访问和/隐私。所以基本上,页面控制器中的任何操作/方法都应该可以访问,而无需指定 /pages/

不确定我是否以正确的方式进行此操作?

【问题讨论】:

  • @ash,做你正在尝试的 .htaccess 可能会更好地为你服务吗?简要解释一下你为什么/你想要实现什么也很酷,谢谢!

标签: php codeigniter controller


【解决方案1】:

直接回答编码问题,你可以这样做:

foreach(glob(APPPATH . 'controllers/*' . EXT) as $controller)
{
    $controller = basename($controller, EXT);

    $route[$controller] = $controller . '/index';
    $route[$controller . '/(.+)'] = $controller . '/$1';
}

不过,这可能不是最灵活的方法。

还有其他几种方法可以做到这一点。一种是创建一个MY_Router并插入

$this->set_class('pages'); 
$this->set_method($segments[0]);

之前/而不是 show_404();

这会将 /contact 发送到 /pages/contact,但前提是没有首先映射控制器、方法、路由。

OOOOOOORRRRRR 使用Modular Separation 并将以下内容添加到您的主路由.php

$routes['404'] = 'pages';

【讨论】:

  • 非常感谢 :) 两个不错的选择!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 1970-01-01
  • 2015-08-23
  • 2015-04-29
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多