【问题标题】:CakePHP 2.3.0 component $controller is not accessibleCakePHP 2.3.0 组件 $controller 不可访问
【发布时间】:2013-05-20 17:02:56
【问题描述】:

我使用的是 Cakephp 2.3.0,正在加载以下组件。

class BreadCrumbsComponent extends Component {

public $components = array();
public $controller = null;

public function initialize($controller) {

}

public function startup($controller) {
    $this->controller = $controller;
}

public function beforeRender($controller) {

}

public function shutDown($controller) {

}

public function beforeRedirect($controller, $url, $status = null, $exit = true) {

}

public function handle($controllerName = NULL, $actionName = NULL) {
    pr($this->controller->modelClass);
}

}

出错后会报错

Trying to get property of non-object [APP\Controller\Component\BreadCrumbsComponent.php, line 38]

我无法访问 $this->controller 那里。任何原因?如何让它发挥作用?

【问题讨论】:

  • 您是否确认正在触发 startup()?如果您按照文档说明正确启动了组件,则应该是这样。因此,由于这很可能是问题所在,您还应该在此处发布相关的控制器代码。
  • 尝试用initialize方法初始化你的控制器。
  • @mark yes startup() 正在工作
  • @MubasshirPawle - 太棒了!我发布了答案以帮助未来的访问者:)

标签: cakephp components cakephp-2.0


【解决方案1】:

Readhere startup 方法是在控制器之后调用的,所以需要在 initialize 方法中初始化控制器,如下所示,

public function initialize(&$controller, $settings = array()) {
    $this->controller = $controller;
}

【讨论】:

  • startup() 通常也可以工作 - 如果在 beforeFilter 方法中没有使用 handle() 方法,而是在操作本身中使用。似乎这里不是这种情况。所以你的解决方案是最好的:)
猜你喜欢
  • 1970-01-01
  • 2014-06-09
  • 2013-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多