In View(CakePHP), the proper way to get current co

2020-05-19 21:20发布

In View, I can get action by using

$this->action

But, I cannot get controller name by

$this->controller

What is the proper way to get current controller in View?

标签: cakephp-2.0
8条回答
霸刀☆藐视天下
2楼-- · 2020-05-19 21:21

$this->name also give you controller's name. Their difference with $this->params['controller'] is it's first letter capitalized

debug($this->name);
debug($this->params['controller']);

Results in:

 \app\Controller\AppController.php (line 176)

'Users'

\app\Controller\AppController.php (line 177)

'users'
查看更多
迷人小祖宗
3楼-- · 2020-05-19 21:23

All the other solutions are to get the controller name... I need the controller itself, so I did the following function in an AdminHelper.php called by $this->Admin->_getController('MyControllerName') into the view.ctp file

/******************************************************************
 * 
 ******************************************************************/
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;
}

Note: don't forget to declare it into the controller you'll use for example:

  • people/view.ctp -> $this->Admin->_getController('MyControllerName')
  • PeopleController.ctp -> var $helpers = array('Html', 'Form', 'Admin');
  • AdminHelper.ctp -> function _getController(...
查看更多
够拽才男人
4楼-- · 2020-05-19 21:25

You can get controller like this:

echo "<pre>controller:".$this->request->params['controller']."</pre>";

Although $this->params is shorter, $this->request->params is more autocomplete friendly. You can check the autocomplete options from this question: PHPStorm autocomplete for CakePHP custom helpers in view files

Other data about request can be taken like this:

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:
As of CakePHP 3 $this->params shortcut is removed. So you should user $this->request->params['controller'] for CakePHP 3.
http://book.cakephp.org/3.0/en/appendices/3-0-migration-guide.html#id2
Also note that first character of controller is uppercase. It was lowercase in Cakephp 2.

查看更多
贪生不怕死
5楼-- · 2020-05-19 21:33

To get the current controller, Try this :$this->params['controller']

To get the current action, Try this :$this->params['action'].

查看更多
我欲成王,谁敢阻挡
6楼-- · 2020-05-19 21:37

Use $this->params['controller'] to get the current controller.

You can do a debug($this->params) to see other available variables.

查看更多
Deceive 欺骗
7楼-- · 2020-05-19 21:38

I am using cakephp 3.2

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

"Missing Helper"

Following code is working properly in cakephp 3.2

$this->request->params['controller'] - Working
查看更多
登录 后发表回答