Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP,将一个控制器导入另一个控制器_Php_Cakephp_Cakephp 2.0_Lazy Loading - Fatal编程技术网

CakePHP,将一个控制器导入另一个控制器

CakePHP,将一个控制器导入另一个控制器,php,cakephp,cakephp-2.0,lazy-loading,Php,Cakephp,Cakephp 2.0,Lazy Loading,我需要在我的另一个控制器中使用一个控制器功能。 但我不想让你失望 $Myother = new MyotherController(); 每次我使用那个控制器的方法。 我如何初始化一个控制器,这样就不会在每个方法中都创建“新”控制器 我发现它是这样写的: App::import('Controller', 'Pages'); class UsersController extends AppController { var $Pages; function beforeFilter()

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

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

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

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


也就是说,如果要将一个控制器的所有模型和关联加载到另一个控制器中,那么最好将关联的代码移动到相应的模型中。

您应该尝试将这些常用方法添加到
AppController
,由于所有控制器都扩展了AppController,所以它是一个很好的地方,可以使用通用控制器功能


也就是说,如果要将一个控制器的所有模型和关联加载到另一个控制器中,那么最好将关联的代码移到适当的模型中。

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

我的建议是使用组件

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


“如果在不缓存requestAction的情况下使用,可能会导致性能低下。在控制器或模型中使用它是不合适的。”

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

我的建议是使用组件

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


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

Hmmm。可能需要对代码进行重构。可能将共享代码移动到帮助器中,或者将其移动到
模型中(如果有意义)。我的代码主要是控制器类型代码,而不是视图或模型代码。所以我计划创建另一个控制器或组件。我要求在一个控制器中使用一个新的控制器。在另一个控制器中使用一个控制器会破坏MVC结构。我建议使用组件或型号。不要。Cake是围绕1个请求=1个控制器设计的。要么停止使用蛋糕,要么把事情做好。您需要这样做的事实表明,您的代码中存在一个基本缺陷,应该予以修复。Hmmm。也许需要对代码进行重构。可能将共享代码移动到帮助器中,或者将其移动到
模型中(如果有意义)。我的代码主要是控制器类型代码,而不是视图或模型代码。所以我计划创建另一个控制器或组件。我要求在一个控制器中使用一个新的控制器。在另一个控制器中使用一个控制器会破坏MVC结构。我建议使用组件或型号。不要。Cake是围绕1个请求=1个控制器设计的。要么停止使用蛋糕,要么把事情做好。您需要这样做的事实表明,您的代码中存在一个应该修复的基本缺陷。这是我的开始。我将所有常用函数放在AppController中。但它变得太大了。将近130千字节。因此,我需要将一些函数提取到另一个控制器或组件中。@trante最好的解决方案可能包括查看所有这些方法,并查看如何将它们划分为逻辑组。组件可能是答案,但是如果这些方法在模型上做了很多操作(比如做查找等),那么您应该真正考虑将代码移到模型本身中。让模型处理你的数据,你的控制器应该只控制请求/响应。这是我的开始。我将所有常用函数放在AppController中。但它变得太大了。将近130千字节。因此,我需要将一些函数提取到另一个控制器或组件中。@trante最好的解决方案可能包括查看所有这些方法,并查看如何将它们划分为逻辑组。组件可能是答案,但是如果这些方法在模型上做了很多操作(比如做查找等),那么您应该真正考虑将代码移到模型本身中。让模型处理您的数据,您的控制器应该只控制请求/响应。