Scr*_*cco 11 php cakephp cakephp-2.0
我需要在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);
}
}
Run Code Online (Sandbox Code Playgroud)
PR($ controllerClasses); 给我控制器列表如下
Array
(
[0] => AppController
[1] => BoardsController
[2] => TeamsController
[3] => TypesController
[4] => UsersController
)
Run Code Online (Sandbox Code Playgroud)
但是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;
}
Run Code Online (Sandbox Code Playgroud)
mar*_*ark 11
像这样的东西应该做的伎俩:https: //github.com/dereuromark/cakephp-sandbox/blob/master/Plugin/Sandbox/Controller/SandboxAppController.php#L12
它基本上使用了一个非常基本的PHP函数:
$actions = get_class_methods($Controller);
Run Code Online (Sandbox Code Playgroud)
然后获取父方法:
$parentMethods = get_class_methods(get_parent_class($Controller));
Run Code Online (Sandbox Code Playgroud)
最后,使用array_diff,您将获得该控制器中的实际操作:
$actions = array_diff($actions, $parentMethods);
Run Code Online (Sandbox Code Playgroud)
然后,您仍然可以过滤掉不需要的操作.