Как получить список всех функций внутри контроллера в cakephp

Мне нужно было выбрать контроллер в CakePHP 2.4 и отобразить все функции, написанные на нем. Я нашел, как перечислить контроллеры из этого вопроса и ответить на поток Stack Overflow, но теперь мне нужен конкретный контроллер. Мне нужно получить список всех функций, которые он содержит.

Вот что я сделал

public function getControllerList() {

   $controllerClasses = App::objects('controller');
   pr($controllerClasses);
   foreach($controllerClasses as $controller) { 

      $actions = get_class_methods($controller);
      echo '<br/>';echo '<br/>';
      pr($actions);

   }
}

рг ($ controllerClasses); дает мне список контроллеров следующим образом

Array
(
    [0] => AppController
    [1] => BoardsController
    [2] => TeamsController
    [3] => TypesController
    [4] => UsersController
)

однако pr ($ actions); ничего...: (

здесь вы делаете окончательный рабочий фрагмент так, как мне нужно

http://www.cleverweb.nl/cakephp/list-all-controllers-in-cakephp-2/

public function getControllerList() {

        $controllerClasses = App::objects('controller');
        foreach ($controllerClasses as $controller) {
            if ($controller != 'AppController') {
                // Load the controller
                App::import('Controller', str_replace('Controller', '', $controller));
                // Load its methods / actions
                $actionMethods = get_class_methods($controller);
                foreach ($actionMethods as $key => $method) {

                    if ($method{0} == '_') {
                        unset($actionMethods[$key]);
                    }
                }
                // Load the ApplicationController (if there is one)
                App::import('Controller', 'AppController');
                $parentActions = get_class_methods('AppController');
                $controllers[$controller] = array_diff($actionMethods, $parentActions);
            }
        }
        return $controllers;
    }

Ответ 1

Что-то вроде этого должно сделать трюк: https://github.com/dereuromark/cakephp-sandbox/blob/master/Plugin/Sandbox/Controller/SandboxAppController.php#L12

В основном используется очень простая PHP-функция:

$actions = get_class_methods($Controller);

Затем получите родительские методы:

$parentMethods = get_class_methods(get_parent_class($Controller));

Наконец, используя array_diff, вы получаете фактические действия в этом контроллере:

$actions = array_diff($actions, $parentMethods);

Затем вы можете отфильтровать нежелательные действия.