В представлении я могу получить действие, используя
$this->action
Но я не могу получить имя контроллера
$this->controller
Каков правильный способ получения текущего контроллера в представлении?
В представлении я могу получить действие, используя
$this->action
Но я не могу получить имя контроллера
$this->controller
Каков правильный способ получения текущего контроллера в представлении?
Используйте $this->params['controller']
для получения текущего контроллера.
Вы можете сделать debug($this->params)
, чтобы увидеть другие доступные переменные.
Вы можете получить контроллер следующим образом:
echo "<pre>controller:".$this->request->params['controller']."</pre>";
Хотя $this->params
короче, $this->request->params
более автозаполнен. Вы можете проверить параметры автозаполнения из этого вопроса: Автозаполнение PHPStorm для пользовательских помощников CakePHP в файлах просмотра
Другие данные о запросе можно сделать следующим образом:
echo "<pre>action:".$this->request->params['action']."</pre>";
echo "<pre>request:"; print_r( $this->request ); echo "</pre>";
echo "<details><summary>this:</summary><pre>";
print_r( $this ); echo "</pre></details>";
Edit:
Начиная с CakePHP 3 $this->params
удаляется ярлык. Таким образом, вы должны пользователь $this->request->params['controller']
для CakePHP 3.
http://book.cakephp.org/3.0/en/appendices/3-0-migration-guide.html#id2
Также обратите внимание, что первый символ контроллера имеет верхний регистр. В Cakephp 2 был строчный регистр.
$this->name
также дает вам имя контроллера.
Их различие с $this->params['controller']
заключается в его заглавной букве
debug($this->name);
debug($this->params['controller']);
Результаты в:
\app\Controller\AppController.php (line 176)
'Users'
\app\Controller\AppController.php (line 177)
'users'
Чтобы получить текущий контроллер, попробуйте следующее: $this->params['controller']
Чтобы получить текущее действие, попробуйте следующее: $this->params['action']
.
Я использую cakephp 3.2
$this->params['controller'] - It is not working, showing error message as bellow..
"Пропавший помощник"
Следующий код работает правильно в cakephp 3.2
$this->request->params['controller'] - Working
Чтобы получить текущий,
$this->params['controller']
$this->params['action']
$this->params['pass']
Все остальные решения - получить имя контроллера... Мне нужен сам контроллер, поэтому я сделал следующую функцию в AdminHelper.php, вызванном $this->Admin->_getController('MyControllerName')
в файл view.ctp
/******************************************************************
*
******************************************************************/
function _getController( $pControllerName ){
if ( ! isset($this->controllersArray[$pControllerName]) ){
$importRes = App::import('Controller', $pControllerName);// The same as require('controllers/users_controller.php');
$strToEval = "\$controller = new ".$pControllerName."Controller;";
$evalRes = eval($strToEval);
if ( $evalRes === false ){
throw new AppException("Eval returned an error into ".__FILE__." getController()");
}
$controller->constructClasses();// If we want the model associations, components, etc to be loaded
$this->controllersArray[$pControllerName] = $controller;
}
$result = $this->controllersArray[$pControllerName];
return $result;
}
Примечание. не забывайте объявлять его в контроллер, который вы будете использовать, например:
$this->Admin->_getController('MyControllerName')
var $helpers = array('Html', 'Form', 'Admin');
function _getController(...