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