Как получить список всех методов в контроллере в cakephp3 - PullRequest
0 голосов
/ 27 июня 2018

В CakePhp2 мы можем получить список методов в контроллере следующим образом:

App::import('Controller', 'TagsController');
$classMethods = get_class_methods('TagsController');

Но в CakePhp3 App :: импорт не работает. Тогда как же получить список методов этого контроллера в CakePHP3?

Спасибо

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Вы можете получить все методы в контроллере, используя php ReflectionMethod class

use ReflectionMethod;

public function getActions($controllerName) {
    $className = 'App\\Controller\\' . $controllerName . 'Controller';
    $class = new ReflectionClass($className);
    $actions = $class->getMethods(ReflectionMethod::IS_PUBLIC);
    $controllerName = str_replace("\\", "/", $controllerName);
    $results = [$controllerName => []];
    $ignoreList = ['beforeFilter', 'afterFilter', 'initialize', 'beforeRender'];
    foreach ($actions as $action) {
        if ($action->class == $className
            && !in_array($action->name, $ignoreList)
        ) {
            array_push($results[$controllerName], $action->name);
        }
    }
    return $results;
}

Если вы хотите получить Users список методов контроллера. Тогда просто позвони $this->getActions('Users')

Надеюсь, это поможет вам.

0 голосов
/ 27 июня 2018

Пожалуйста, обратите внимание на эту ссылку. Я думаю App::import() меняется на App::classname()

https://book.cakephp.org/3.0/en/core-libraries/app.html

Вы можете использовать эту часть.

// Names with \ in them will be returned unaltered.
App::classname('App\Cache\ComboCache');
// Returns App\Cache\ComboCache 
get_class_methods('App\Cache\ComboCache')
...