我需要在另一个控制器中使用控制器功能。 但我不想做
$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();
}
}
这是正确的方式,还是有更好的方法?
答案 0 :(得分:2)
您应该尝试将这些常用方法添加到AppController
,因为所有控制器都扩展AppController
,这是一个坚持常见控制器功能的好地方。
话虽如此,如果您将一个控制器的所有模型和关联加载到另一个控制器中,那么您可能最好将相关代码移动到相应的模型中。
答案 1 :(得分:2)
我认为真正唯一的方法就是切换到使用某些组件。使用其组件/帮助器/模型初始化新控制器将导致更多的问题,这可能不值得折衷。更不用说,它会促进糟糕的设计。
我的建议是使用组件。
如果只需要另一个控制器中的操作结果,则可以始终使用requestAction()。然而,即使CakePHP也说人们应该小心它。
“如果在没有缓存的情况下使用requestAction会导致性能不佳。很少适合在控制器或模型中使用。”