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

时间:2015-02-27 06:52:01

标签: php codeigniter class methods controller

我知道这段代码:

$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;
}

3 个答案:

答案 0 :(得分:4)

您可以使用本机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

答案 1 :(得分:1)

-Oli Soproni B。(https://stackoverflow.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

答案 2 :(得分:0)

在控制器中尝试此测试功能

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