How to get an array of all controllers in a Codeigniter project?(如何在 Codeigniter 项目中获取所有控制器的数组?)
问题描述
我想获取 Codeiginiter 项目中所有控制器的列表,以便我可以轻松地遍历每个控制器并添加定义的路由.我似乎找不到一种方法可以满足我的需求?
I'd like to obtain a list of all controllers in a Codeiginiter project so I can easily loop through each of them and add defined routes. I can't seem to find a method that will give me what I'm after ?
这是我想要访问数组的 routes.php 文件中的代码片段:-
Here is the code snippet from the routes.php file where I would like to access the array: -
// 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
为了进一步解释我想要实现的目标..我有一个页面控制器,其中包含诸如关于、联系我们、隐私等页面.这些页面都应该可以通过/about、/contact-us 访问和/隐私.所以基本上,Pages 控制器中的任何操作/方法都应该可以访问,而无需指定/pages/.
To explain a little more what I'm trying to achieve.. I have a Pages controller which contains pages such as about, contact-us, privacy etc. These pages should all be accessible via /about, /contact-us and /privacy. So basically, any action/method in the Pages controller should be accessible without having to specify /pages/<action>.
不确定我是否以正确的方式进行处理?
Not sure if I'm going about this the right way ?
推荐答案
直接回答编码问题,你可以这样做:
Well to directly answer to coding question, you can do this:
foreach(glob(APPPATH . 'controllers/*' . EXT) as $controller)
{
$controller = basename($controller, EXT);
$route[$controller] = $controller . '/index';
$route[$controller . '/(.+)'] = $controller . '/$1';
}
Buuuuuut 这可能不是最灵活的方法.
Buuuuuut this may not work out to be the most flexible method further down the line.
还有其他一些方法可以做到这一点.一种是创建一个MY_Router并插入
There are a few other ways to do it. One is to create a MY_Router and insert
$this->set_class('pages');
$this->set_method($segments[0]);
之前/代替show_404();
before/instead of show_404();
这会将/contact 发送到/pages/contact,但前提是没有控制器、方法、路由首先映射到.
That will send /contact to /pages/contact, but only if no controllers, methods, routes are mapped to first.
OOOOOOORRRRRR 使用 Modular Separation 并将以下内容添加到您的主要 routes.php
OOOOOOORRRRRR use Modular Separation and add the following to your main routes.php
$routes['404'] = 'pages';
这篇关于如何在 Codeigniter 项目中获取所有控制器的数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在 Codeigniter 项目中获取所有控制器的数组?
基础教程推荐
- PHP 守护进程/worker 环境 2022-01-01
- Doctrine 2 - 在多对多关系中记录更改 2022-01-01
- 如何在 Symfony 和 Doctrine 中实现多对多和一对多? 2022-01-01
- phpmyadmin 错误“#1062 - 密钥 1 的重复条目‘1’" 2022-01-01
- 如何在 XAMPP 上启用 mysqli? 2021-01-01
- 在 CakePHP 2.0 中使用 Html Helper 时未定义的变量 2021-01-01
- 使用 PDO 转义列名 2021-01-01
- 在 yii2 中迁移时出现异常“找不到驱动程序" 2022-01-01
- HTTP 与 FTP 上传 2021-01-01
- 找不到类“AppHttpControllersDB",我也无法使用新模型 2022-01-01