如何获取一个Codeigniter项目中所有控制器的数组? [英] How to get an array of all controllers in a Codeigniter project?

查看:188
本文介绍了如何获取一个Codeigniter项目中所有控制器的数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想获得Codeiginiter项目中所有控制器的列表,以便我可以轻松地循环遍历它们并添加定义的路由。我似乎找不到一个方法,将给我以后的东西。



这里是来自routes.php文件的代码片段,我想访问数组: -

  //我想让$ controllers动态填充一个方法
//
$ controllers = array('pages','users');

//循环遍历每个控制器并添加控制器/动作路由
//
foreach($ controllers as $ controller){
$ route [$ controller] = $ controller。 '/指数';
$ route [$ controller。 '/(.+)'] = $ controller。 '/ $ 1';
}

//任何没有/的URL都应该作为对
的操作来尝试//页面控制器
//
$ route ['([^ \ /] +)$'] ='pages / $ 1';

UPDATE#1



为了更多地解释一下我想要实现..我有一个页面控制器,其中包含诸如关于,联系我们,隐私等页面。这些页面都应通过/ about,/ contact-我们和/隐私。因此,基本上,应该可以访问Pages控制器中的任何操作/方法,而无需指定/ pages /< action>。



不知道我是否会正确的方式?

解决方案

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

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

$ route [$ controller] = $ controller。 '/指数';
$ route [$ controller。 '/(.+)'] = $ controller。 '/ $ 1';
}

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



还有其他几种方法。一个是创建一个MY_Router并插入

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

之前/代替show_404();



OOOOOOORRRRR使用

这将发送/联系到/ pages / ://codeigniter.com/wiki/Modular_Separation/rel =nofollow noreferrer> Modular Separation 并将以下内容添加到您的主要routes.php

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


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 ?

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';

UPDATE #1

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 this may not work out to be the most flexible method further down the line.

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]);

before/instead of show_404();

That will send /contact to /pages/contact, but only if no controllers, methods, routes are mapped to first.

OOOOOOORRRRRR use Modular Separation and add the following to your main routes.php

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

这篇关于如何获取一个Codeigniter项目中所有控制器的数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆