CAKEPHP创建组件或其他控制器



我有一个非常大的appcontroller。近75个功能和130千元。似乎这减慢了我的系统。因此,我需要将这些功能放在另一个文件中,并在其他控制器需要时包含该文件。

选项正在创建新的控制器或新组件。我正在尝试做出选择。优点或缺点是什么?

我的观点是:

  • 我不打算在另一个项目中使用这些功能。这些功能只能由该项目使用。
  • 在我的AppController中,我使用这些文件,型号,组件。因此,应该可以通过新结构来访问它们。

    App::import('Vendor', 'MyFancyVendor', array('file' => 'MyFancyVendor.php'));
    App::uses('CakeEmail', 'Network/Email');
    public $uses = array('Mytable1', 'Mytable2', 'Mytable3', 'Mytable4');  
    public $components    = array('Session');  
    public $helpers = array('Session','Html');
    

编辑:尽管使用巨大的新控制器/组件似乎与旧结构相同,但是差异是:说它是mycontroller12,而mycontroller13不使用AppController中这些巨大功能的方法。但是由于使用myController12,是由AppController创建的,它加载了不需要的模型,组件和其他内容。如果我将这些逻辑放在我的AppController中,MyController12不会加载所有逻辑。

遵循此模式:

  • 收集库中的所有相关功能。
  • 移动模型中的所有数据逻辑。
  • 移动所有视图的视图(请记住视图不是模板)
  • 对于其他剩下的东西,创建一些帮助者

这将使您的控制器更薄。考虑到您确实不想在任何其他项目或网站的一部分中使用此类功能。

,创建其他控制器应该是您的最后机会。

函数数量和文件的大小绝对不会影响代码执行的时间。

示例:这具有超过50 加载插件,100ish控制器,84K代码和页面的加载非常快。

您需要查看正在运行的查询。我怀疑您使用的是将recursive设置为12的查询。您至少应该使用可容纳的。

还要查看explain的选择。如果您使用的是MySQL检查,或者您的引擎相似。

您还可以安装调试套件,该套件显示了很多关于花费时间的内容,并且可以加速。

从我可以阅读的内容中,也许您会想到将应用程序controller分为多个不同的文件。没有看到您的AppController,似乎它在假设有很多不同的角色。

也许最好将不同的控制器用于mytable1,mytable2,mytable3,mytable4,并使用组件共享它们之间的任何信息。

要回答您的问题,这两者都使用,也是使用libs和助手。必要时控制器,以及必要时的组件。将庞大的AppController更改为巨大组件是没有意义的。将您的文件分开,在您看到共同点的地方。例如,ImageController或PostController都将使用会话组件。

编辑:如何将$ helper,$组件和$用法从AppController更改为单个控制器?使用关系,以便CakePHP可以找到模型。并确保控制器不会加载额外的型号/类

最新更新