gpt4 book ai didi

php - CakePHP 将共享代码放在哪里?

转载 作者:搜寻专家 更新时间:2023-10-31 21:08:57 24 4
gpt4 key购买 nike

我正在使用 Cake 开发一个与文件系统进行大量交互的应用程序。基本思想是监视和索引文件夹及其子文件夹和文件,并将每个文件的元数据保存在数据库中。到目前为止它运行良好,但现在我在理解 MVC 机制方面遇到了一些问题。

我得到了这个沉重的 FilesController,它有很多功能来检查文件是否是最新的或者它是否已经移动,更新数据库条目等等......现在我想从一个shell/cronjob,我也想在浏览器中调用它们。

我听到很多人提示在 shell 中导入 Controller ,我想我明白为什么这是一个坏主意。但现在我想在 shell 和 Controller 中使用直接与 FileModel 交互的相同代码。放在哪里?这种情况下的最佳做法是什么?在一个组件中,加载模型?在 Controller 中,在 shell 中导入它?

提前感谢您的帮助<3

最佳答案

I got this heavy FilesController with a lot of functions checking if a file is up-to-date or if it has moved,

错误的地方,重度 Controller 肯定是错误的。你想要胖模型,瘦 Controller 。如果有提取元数据的逻辑,我可能会将其放入 app/Utility/FileMetaData 或 app/Lib/FileMetaData.php 并使其成为一个新类。根据它的作用,您可以扩展核心类 Folder 或 File。

元数据的处理逻辑和读取文件夹应该进入一个模型。通过将 $uses 属性与模型数组一起使用,可以像在 Controller 中一样从 shell 使用该模型。

为了实例化该类,我会在返回实例的模型中使用辅助方法(我不是指的是 View 辅助!)。这样做的原因是能够在单元测试中模拟该方法调用的结果。此外,如果您更改了类或构造函数参数,您只需更改一个地方。

Controller 在 shell 中显然是错误的。没有要求处理。当然,从技术上讲,你可以做特技并在那里实例化它们,但这是错误的,没有任何意义。如果您认为您必须或“需要”这样做,那么您的应用程序架构有问题。

你可能想看看我的 FileStorage插件也是如此。您可以在那里实现事件监听器,并在存储文件时让监听器自动处理元数据。

关于php - CakePHP 将共享代码放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26102313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com