CakePHP 2.6 访问组件内的控制器对象

CakePHP 2.6 Access Controller Object within a Component

我有一个被许多控制器使用的组件,我想知道是否有一种方法可以从组件访问控制器对象而不必将其传递到组件中。

例如,我目前正在将对控制器的引用传递给 MyAuthComponent:

$this->Auth->isAuthenticated($this);

但是,如果可能的话,我宁愿能够在不必传递引用的情况下调用它。这可能吗?

组件回调接收控制器实例作为参数。因此,使用组件的 startup() 回调保存对组件 属性 的引用,然后您可以在组件的其他方法中使用它。检查 manual/api 以获得 startup() 接收的参数列表。

这是@ADmad 回答的代码示例

class AuthComponent extends Component {    
    var $controller = null;
         /**
         * Startup component
         *
         * @param object $controller Instantiating controller
         * @access public
         */ 
        public function startup(Controller $controller) {        
            $this->controller = $controller;
        }
}

根据 cakephp3.x 使用注册表的指南,您可以从组件内访问当前控制器。

$controller = $this->_registry->getController();

并且您可以使用下面提到的事件对象在任何组件回调方法中访问控制器。

$controller = $event->getSubject();