Как получить список всех функций внутри контроллера в 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);
Затем вы можете отфильтровать нежелательные действия.