Codeigniter如何在当前控制器中获取所有/特定方法

Posted

技术标签:

【中文标题】Codeigniter如何在当前控制器中获取所有/特定方法【英文标题】:Codeigniter how to get all/specific method in current controller 【发布时间】:2015-04-29 19:38:48 【问题描述】:

我知道这段代码:

$this->router->fetch_class(); // get current controller name
$this->router->fetch_method(); // get current method name

我想要做的是获取当前控制器或特定控制器中可用的所有方法。有人有同样的经历吗?谢谢。

解决方案

我创建助手来列出特定控制器中的所有方法

function list_this_controllers_method_except($controller, $except = array())

    $methods = array();

    foreach(get_class_methods($controller) as $method)
    
        if (!in_array($method, $except))
        
            $methods[] = $method;
        
    

    return $methods;

【问题讨论】:

你在哪里叫控制器?在其他控制器中? 【参考方案1】:

你可以使用原生 php 来获取类方法

get_class_methods($this);

$this 是被调用的控制器

仅供参考

class user extends CI_Controller 

    public function __construct() 

                #-------------------------------
                # constructor
                #-------------------------------

                parent::__construct();

                var_dump(get_class_methods($this));

            


阅读文档

http://php.net/manual/en/function.get-class-methods.php

【讨论】:

太好了,我使用了这个php函数,但是如何不打印像construct和get_instance这样的特定函数? 我认为你不能......也许在返回结果中你可以过滤掉你想要的不必要的功能【参考方案2】:

-Oli Soproni B.(https://***.com/users/1944946/oli-soproni-b)

感谢我已经这样使用它了:

class user extends CI_Controller 

    public function __construct() 

                #-------------------------------
                # constructor
                #-------------------------------

                parent::__construct();

                $methodList = get_class_methods($this);
                foreach ($methodList as $key => $value) 
                 if($value!="__construct"&&$value!="get_instance"&&$value!="index") 
            echo "$value"."\n";
                 

                

            


junior

【讨论】:

【参考方案3】:

在控制器中试试这个测试功能

    public function test()
       
     $this->load->helper('file');
     $controllers = get_filenames( APPPATH . 'controllers/' ); 

    foreach( $controllers as $k => $v )
    
        if( strpos( $v, '.php' ) === FALSE)
        
            unset( $controllers[$k] );
        
    

    echo '<ul>';

    foreach( $controllers as $controller )
    
        echo '<li>' . $controller . '<ul>';

        include_once APPPATH . 'controllers/' . $controller;

        $methods = get_class_methods( str_replace( '.php', '', $controller ) );

        foreach( $methods as $method )
        
            echo '<li>' . $method . '</li>';
        

        echo '</ul></li>';
    

    echo '</ul>'; 
 

【讨论】:

以上是关于Codeigniter如何在当前控制器中获取所有/特定方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在codeigniter中查看基于链接ID的所有数据

PHP 在Codeigniter中获取当前控制器/方法名称

在Codeigniter中获取当前控制器/方法名称

如何从 Codeigniter 中的视图获取控制器的 URL?

使用 codeigniter 在控制器中使用 $CI->load->vars() 获取加载的变量

如何在 Codeigniter 中加入三个表