0

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

$Myother = new MyotherController();

每次我使用该控制器中的方法时。我怎样才能初始化一个控制器,这样我就不会在每个方法中都创建一个“新”?

我找到了这个,它是这样写的:

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();
  }
}

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

4

2 回答 2

2

您应该尝试将这些常用方法添加到您AppControllerAppController.

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

于 2012-12-19T07:30:14.173 回答
2

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

我的建议是使用组件。

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

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

于 2012-12-19T09:33:57.763 回答