如何在 Codeigniter 项目中获取所有控制器的数组?

2023-10-11php开发问题
3

本文介绍了如何在 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 项目中获取所有控制器的数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

PHP实现DeepL翻译API调用
DeepL的翻译效果还是很强大的,如果我们要用php实现DeepL翻译调用,该怎么办呢?以下是代码示例,希望能够帮到需要的朋友。 在这里需要注意,这个DeepL的账户和api申请比较难,不支持中国大陆申请,需要拥有香港或者海外信用卡才行,没账号的话,目前某宝可以...
2025-08-20 php开发问题
168

PHP通过phpspreadsheet导入Excel日期数据处理方法
PHP通过phpspreadsheet导入Excel日期,导入系统后,全部变为了4开头的几位数字,这是为什么呢?原因很简单,将Excel的时间设置问文本,我们就能看到该日期本来的数值,上图对应的数值为: 要怎么解决呢?进行数据转换就行,这里可以封装方法,或者用第三方的...
2024-10-23 php开发问题
287

mediatemple - 无法使用 codeigniter 发送电子邮件
mediatemple - can#39;t send email using codeigniter(mediatemple - 无法使用 codeigniter 发送电子邮件)...
2024-08-23 php开发问题
11

Laravel Gmail 配置错误
Laravel Gmail Configuration Error(Laravel Gmail 配置错误)...
2024-08-23 php开发问题
16

将 PHPMailer 用于 SMTP 的问题
Problem with using PHPMailer for SMTP(将 PHPMailer 用于 SMTP 的问题)...
2024-08-23 php开发问题
4

关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题
Issue on how to setup SMTP using PHPMailer in GoDaddy server(关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题)...
2024-08-23 php开发问题
17