在View(CakePHP)中,获取当前控制器的正确方法是什么?

在View中,我可以通过使用获取操作

$this->action 

但是,我无法得到控制器名称

 $this->controller 

在View中获取当前控制器的正确方法是什么?

使用$this->params['controller']来获取当前的控制器。

你可以做一个debug($this->params)来查看其他可用的variables。

你可以得到像这样的控制器:

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

虽然$this->params更短,但$this->request->params更友好。 您可以从这个问题中检查自动完成选项: 查看文件中的CakePHP自定义助手的PHPStorm自动完成function

有关请求的其他数据可以采取这样的方式:

 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>"; 

编辑:
从CakePHP 3 $this->params快捷方式被删除。 所以你应该为CakePHP 3使用$this->request->params['controller']
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']

所有其他的解决scheme是获取控制器名称…我需要控制器本身,所以我做了一个AdminHelper.php调用$this->Admin->_getController('MyControllerName')到view.ctp中的以下function文件

 /****************************************************************** * ******************************************************************/ 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(...