35

在 View 中,我可以使用

$this->action

但是,我无法通过

$this->controller

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

4

8 回答 8

80

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

您可以执行 adebug($this->params)查看其他可用变量。

于 2012-10-24T00:31:45.780 回答
12

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

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

虽然$this->params更短,$this->request->params但对自动完成更友好。您可以从这个问题中检查自动完成选项:PHPStorm autocomplete for CakePHP custom helpers in view files

有关请求的其他数据可以这样获取:

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快捷方式已被删除。所以你应该使用$this->request->params['controller']CakePHP 3。
http://book.cakephp.org/3.0/en/appendices/3-0-migration-guide.html#id2
另请注意控制器的第一个字符是大写的。在 Cakephp 2 中它是小写的。

于 2014-03-18T17:35:17.927 回答
9

$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'
于 2013-09-27T09:20:38.300 回答
4

要获取当前控制器,请尝试以下操作:$this->params['controller']

要获取当前操作,请尝试以下操作:$this->params['action']

于 2013-06-18T13:44:23.630 回答
4

我正在使用 cakephp 3.2

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

《失踪的帮手》

以下代码在 cakephp 3.2 中正常工作

$this->request->params['controller'] - Working
于 2016-05-19T07:23:01.240 回答
3

对于 cakephp 3.6 及更高版本:

虽然上述解决方案可以工作,但它给出了不推荐使用的警告,并且在 cakephp 4 中不起作用。所以最好使用以下代码来获取控制器名称。它也适用于视图页面和控制器。

$this->request->getParam('controller')
于 2018-11-22T12:32:44.153 回答
2

要获得电流,

  • 控制器:$this->params['controller']
  • 行动:$this->params['action']
  • 论据:$this->params['pass']
于 2013-09-10T05:43:20.483 回答
0

所有其他解决方案都是获取控制器名称......我需要控制器本身,所以我在$this->Admin->_getController('MyControllerName')view.ctp 文件中调用的 AdminHelper.php 中执行了以下函数

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

注意:不要忘记将它声明到您将使用的控制器中,例如:

  • 人/view.ctp ->$this->Admin->_getController('MyControllerName')
  • PeopleController.ctp ->var $helpers = array('Html', 'Form', 'Admin');
  • AdminHelper.ctp ->function _getController(...
于 2016-01-31T21:41:01.950 回答