1

提前感谢您为我目前的网络编码体验提供的任何帮助和耐心。

背景:

我目前正在尝试为我的家族企业开发基于 Web 的应用程序。我用 C# 开发了这个系统的当前版本,但是我想获得基于 Web 的系统,并在此过程中学习 cakephp 和 MVC 模式。

当前问题:我目前被困在一个应该处理 PurchaseTicket 的控制器中。这张票将有一个关联的客户、订单项、总计等。我一直在尝试为控制器开发一个基本的“add()”功能,但是我遇到了以下问题:

  • 我正在创建一个包含所有内容的视图:一个搜索客户的按钮、一个添加行项目的按钮和一个保存按钮。由于我习惯于开发桌面应用程序,我想我可能正在尝试将相同的逻辑转移到基于 Web 的应用程序中。这是推荐或可行的吗?

我遇到了诸如“搜索客户”之类的基本问题。从 New Ticket 页面,我重定向到客户控制器,搜索然后将结果放入会话变量或将其发回,但是当我继续处理所需的其余信息时,我最终得到了一些“意大利面条”代码。我应该做一个多部分的表格吗?如果我这样做,我会破坏应用程序的视觉设计。

现在我最终实例化了我的 PurchaseTicket 模型并将其放入会话变量中。我这样做是为了保存中间数据,但是我不确定实例化模型是否符合 cakephp 标准或 MVC 模式。

我为篇幅道歉,这是我作为会员的第一篇文章。

谢谢!

4

1 回答 1

0

欢迎来到堆栈溢出!

所以听起来有几个问题,都有相当开放的答案。我不知道这是否会最终得到这样的答案,但它提供的信息比我可以发表的评论要多,所以我开始了:

首先,如果您还没有,我建议您先阅读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!

于 2013-03-10T06:15:22.953 回答