Подтвердить что ты не робот

В View (CakePHP), правильный способ получить текущий контроллер?

В представлении я могу получить действие, используя

$this->action

Но я не могу получить имя контроллера

$this->controller

Каков правильный способ получения текущего контроллера в представлении?

4b9b3361

Ответ 1

Используйте $this->params['controller'] для получения текущего контроллера.

Вы можете сделать debug($this->params), чтобы увидеть другие доступные переменные.

Ответ 2

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

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 был строчный регистр.

Ответ 3

$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'

Ответ 4

Чтобы получить текущий контроллер, попробуйте следующее: $this->params['controller']

Чтобы получить текущее действие, попробуйте следующее: $this->params['action'].

Ответ 5

Я использую cakephp 3.2

$this->params['controller'] - It is not working, showing error message as bellow..

"Пропавший помощник"

Следующий код работает правильно в cakephp 3.2

$this->request->params['controller'] - Working

Ответ 6

Чтобы получить текущий,

  • контроллер: $this->params['controller']
  • действие: $this->params['action']
  • аргументы: $this->params['pass']

Ответ 7

Все остальные решения - получить имя контроллера... Мне нужен сам контроллер, поэтому я сделал следующую функцию в 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;
}

Примечание. не забывайте объявлять его в контроллер, который вы будете использовать, например:

  • people/view.ctp → $this->Admin->_getController('MyControllerName')
  • PeopleController.ctp → var $helpers = array('Html', 'Form', 'Admin');
  • AdminHelper.ctp → function _getController(...