CakePHP получает имя действия

В CakePHP можно получить строку вызываемой функции с помощью

$this->action

синтаксис. Он возвращает литеральную строку того, что вызывается, поэтому, если URL-адрес /do_this, он возвращает do_this, и если он doThis, он вернет doThis. Независимо от имени имени вызываемого метода.

То, что я ищу, с другой стороны, является фактическим именем вызываемого метода, независимо от синтаксиса URL.

Есть ли способ узнать это?

Я предпочел бы это сделать в методе beforeFilter.

Ответ 1

Вы должны использовать объект запроса.

CakePHP 3.3 и ниже

$this->request->params['action'];

Так как 3.4

$this->request->getParam('action');

Я думаю, что это должно содержать имя реального метода, которое было вызвано. Маршрутизатор CakePHPs разрешает URL-адрес строки контроллера/действия и другие аргументы, все это заканчивается в объекте запроса. Прочитайте документацию и сделайте debug($this->request); в свой файл beforeFilter(), чтобы узнать, что еще там.

Ответ 2

В CakePHP 2 вы можете использовать $this- > action, в CakePHP 3 вы должны использовать $this- > request- > params ['action']

Ответ 3

Массив params (CakePHP >= 3.4) устарел. Правильный способ получить текущее действие в контроллере:

$currentAction = $this->request->getParam('action');

Ответ 4

Вы взглянули на это? Получение имени текущей функции в php Это явно не будет работать в beforeFilter. Вы можете установить переменную: private $action_name в контроллере и установить его из методов и использовать его впоследствии, в afterFilter