在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(...