Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 科哈纳管制员名单_Php_Kohana_Kohana 3 - Fatal编程技术网

Php 科哈纳管制员名单

Php 科哈纳管制员名单,php,kohana,kohana-3,Php,Kohana,Kohana 3,我正在寻找一种在Kohana应用程序中以编程方式获取控制器列表的方法 比如: public function build_site_map(){ $controllers = Kohana::get_controllers(); echo '<ul>'; foreach($controllers as $controller){ echo '<li><a href="'.URL::base().$controller

我正在寻找一种在Kohana应用程序中以编程方式获取控制器列表的方法

比如:

public function build_site_map(){
     $controllers = Kohana::get_controllers();

     echo '<ul>';
     foreach($controllers as $controller){
         echo '<li><a href="'.URL::base().$controller.'">'.$controller.'</a></li>';
     }
     echo '</ul>';
}
public function build\u site\u map(){
$controllers=Kohana::get_controllers();
回声“
    ”; foreach($controller作为$controller){ 回音“
  • ”; } 回声“
”; }
我意识到我可以阅读/application/classes/controllers/目录,但我希望有一种更简单的方法


谢谢,

恐怕没有
Kohana::get_controllers()
方法可以轻松调用以获取各种站点地图。这是因为控制器是动态调用的,即基于请求的URL和路由配置,Kohana检查控制器(和操作)是否存在,然后调用它们。Kohana没有记录所有可用的控制器和可访问的操作

无论是遍历
/application/classes/controllers
目录还是获取所有文件的列表,都不会得到所需的结果,因为不仅要读取操作(可以相当容易地完成),还需要考虑一些操作

正如您所看到的,这可能是一个非常复杂的问题,不能简单地用可以粘贴在这里的代码片段来回答


如果您决定编写一个脚本来实际创建这样一个地图,但是您在途中遇到了一个问题,那么我们将能够提供更多帮助,否则这个问题就太开放了。此外,如果您要编写它,我建议您将其创建为一个模块,以便能够包含在任何其他项目中并共享它。

可以使用
Kohana::list_files('classes/controller')获取控制器文件的列表。
。但是正如Michal已经说过的,控制器/动作和路由之间没有1:1的关系。

这里是获取所有控制器及其动作的解决方案。我使用它向系统中添加权限

/**
 * get all the controllers and the actions that can be used
 * @return array 
 */
public static function list_controllers()
{
    $list_controllers = array();

    $controllers = Kohana::list_files('classes/controller');

    foreach ($controllers as $controller) 
    {
        $controller = basename($controller,'.php');
        $list_controllers[] = $controller;

        $class      = new ReflectionClass('Controller_Panel_'.$controller);
        $methods    = $class->getMethods();
        foreach ($methods as $obj => $val) 
        {
            if (strpos( $val->name , 'action_') !== FALSE )
            {
                $list_controllers[$controller][] = str_replace('action_', '', $val->name);
            }
        }
    }

    return $list_controllers;
}