我有一个被许多控制器使用的组件,我想知道是否有一种方法可以从组件访问控制器对象而无需将其传递给组件。
例如,我目前正在将对控制器的引用传递给 MyAuthComponent:
$this->Auth->isAuthenticated($this);
但是,如果可能的话,我宁愿能够调用它而不必传递引用。这可能吗?
我有一个被许多控制器使用的组件,我想知道是否有一种方法可以从组件访问控制器对象而无需将其传递给组件。
例如,我目前正在将对控制器的引用传递给 MyAuthComponent:
$this->Auth->isAuthenticated($this);
但是,如果可能的话,我宁愿能够调用它而不必传递引用。这可能吗?
组件回调接收控制器实例作为参数。因此,使用组件的startup()
回调保存对组件属性的引用,然后您可以在组件的其他方法中使用它。检查手册/api 以获取startup()
收到的参数列表。
这是@ADmad answere 的代码示例
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();