CakePHP,在另一个控制器内导入一个控制器

时间:2012-12-19 07:23:13

标签: php cakephp cakephp-2.0 lazy-loading

我需要在另一个控制器中使用控制器功能。 但我不想做

$Myother = new MyotherController();

每次我使用该控制器的方法。 如何初始化控制器,以便我不会在每种方法中都使用“新”?

我找到this,它写得像这样:

App::import('Controller', 'Pages');
class UsersController extends AppController {
  var $Pages;
  function beforeFilter() {
    $this->Pages =& new PagesController; /*Loads the class*/
    $this->Pages->constructClasses(); /*Loads the model associations, components, etc. of the    Pages controller*/
  }
  function index() {
    $this->Pages->index();
  }
}

这是正确的方式,还是有更好的方法?

2 个答案:

答案 0 :(得分:2)

您应该尝试将这些常用方法添加到AppController,因为所有控制器都扩展AppController,这是一个坚持常见控制器功能的好地方。

话虽如此,如果您将一个控制器的所有模型和关联加载到另一个控制器中,那么您可能最好将相关代码移动到相应的模型中。

答案 1 :(得分:2)

我认为真正唯一的方法就是切换到使用某些组件。使用其组件/帮助器/模型初始化新控制器将导致更多的问题,这可能不值得折衷。更不用说,它会促进糟糕的设计。

我的建议是使用组件。

如果只需要另一个控制器中的操作结果,则可以始终使用requestAction()。然而,即使CakePHP也说人们应该小心它。

“如果在没有缓存的情况下使用requestAction会导致性能不佳。很少适合在控制器或模型中使用。”