问题 如何在cakephp中获取控制器内所有函数的列表


我需要选择一个控制器 CakePHP 2.4 并显示其中写入的所有功能。我找到了如何从这个问题和答案线程中列出控制器 堆栈溢出 但我现在需要的是一个特定的控制器,我需要获得它包含的所有函数的列表。

在这里我做了什么

public function getControllerList() {

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

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

   }
}

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

9962
2018-01-07 04:13


起源

你知道我最喜欢的黑旗歌是什么吗? “Gimme Gimme Gimme”这就是说,你为实现这一目标做了什么?我还编辑了这个问题,以便更清楚地说明你所讨论的框架。你不能简单地去“Gimme this!”并期望人们这样做。 - JakeGould
抱歉这个小小的gimme ....我会在几分钟内更新我的代码。 - Scrappy Cocco
谢谢!刚投票,因为这是一个有效的问题,代码显示你知道你在做什么。 - JakeGould


答案:


像这样的东西应该做的伎俩: 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);

然后,您仍然可以过滤掉不需要的操作。


11
2018-01-07 04:15



要走的路....这个链接真的有助于了解更多...非常... - Scrappy Cocco