欢迎来到堆栈溢出!
所以听起来有几个问题,都有相当开放的答案。我不知道这是否会最终得到这样的答案,但它提供的信息比我可以发表的评论要多,所以我开始了:
首先,如果您还没有,我建议您先阅读CakePHP 博客教程以熟悉 Cake,然后再直接转换您现有的桌面应用程序。
其次,熟悉CakePHP 的烘焙控制台。如果您使用它来开始您的应用程序的网络版本,它将为您节省大量时间。
在尝试解决实质性问题之前,我无法强调在一个小项目中正确掌握 MVC 和 CakePHP 的重要性。
第三,Web 应用程序的 UI 绝对不同于桌面应用程序。在 CakePHP 的情况下,没有任何东西在服务器上永久“运行”。整个 CakePHP 框架被实例化,并随着对服务器的每个页面请求而死亡。从桌面应用程序过渡时,这可能是一个棘手的概念,在桌面应用程序中,所有内容都存储在内存中,并且对象的实例可以存在只要您希望它们存在。使用桌面应用程序,更容易让用户去做另一项任务(例如搜索客户),然后将结果发送回调用对象,其实例仍然存在。正如您所发现的,如果您尝试通过在会话中存储过多信息来在 Web 应用程序中模仿此功能,您很快就会得到意大利面条式代码。
您可以使用 AJAX(如果您还不了解它,请用 Google 搜索)仅更新页面的某些部分,并获得更精简的 UI,这听起来像是您需要做的事情。要大致了解这些可能性,您可能需要查看Bamboo Invoice。它不是用 CakePHP 构建的,而是用 CodeIgniter 构建的,CodeIgniter 是另一个开源 PHP MVC 框架。听起来 Bamboo Invoice 与您所描述的功能有很多相似的功能(发票包含行项目、总计、客户等),因此它可能会帮助您了解应该如何构建界面 - 并且如果您想深入研究源代码,如何实现一些您想做的事情。
Bamboo Invoice 使用 Ajax 为应用程序提供“一个视图,上面包含所有内容”的感觉,这听起来像是您想要的。
第四,关于您的客户搜索情况的具体情况,将内容存储在会话变量中可能不是要走的路。您可能希望使用自动完成字段,每次在字段中输入字符后,它都会向服务器发送一个 Ajax 请求,并显示服务器发回的建议/匹配客户列表。在此处查看示例:http: //jqueryui.com/autocomplete/。实现自动完成并非完全直接,但网络上应该有大量示例和教程。
最后,我显然不知道您的业务是做什么的,但是在构建自己的软件之前,您是否研究过可能适合您的现有软件?有很多很棒的、灵活的基于 Web 的解决方案,价格非常合理,适用于企业的许多常见任务。与构建您自己的解决方案相比,有些东西可能会以更少的时间和金钱为您带来出色的结果。
不管怎样,祝你好运,享受 CakePHP!