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

时间:2012-10-23 15:43:32

标签: cakephp-2.0

在View中,我可以使用

获取操作
$this->action

但是,我无法通过

获得控制器名称
$this->controller

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

8 个答案:

答案 0 :(得分:79)

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

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

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

答案 2 :(得分: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'

答案 3 :(得分:4)

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

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

答案 4 :(得分:4)

我正在使用cakephp 3.2

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

“失踪的助手”

以下代码在cakephp 3.2中正常运行

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

答案 5 :(得分:2)

获取最新信息,

  • 控制器:$this->params['controller']
  • 行动:$this->params['action']
  • 参数:$this->params['pass']

答案 6 :(得分:2)

对于cakephp 3.6和更高版本:

尽管以上解决方案都可以使用,但是它给出了过时的警告,并且在cakephp 4中不起作用。 因此,最好使用以下代码来获取控制器名称。它也将在视图页面和控制器中工作。

$this->request->getParam('controller')

答案 7 :(得分:0)

所有其他解决方案都是获取控制器名称...我需要控制器本身,所以我在$this->Admin->_getController('MyControllerName')调用的AdminHelper.php中将以下函数添加到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 - &gt; $this->Admin->_getController('MyControllerName')
  • PeopleController.ctp - &gt; var $helpers = array('Html', 'Form', 'Admin');
  • AdminHelper.ctp - &gt; function _getController(...