这是我第一次使用PHP框架,我对这个设计模式有疑问。
假设我正在尝试构建一个具有联系我们页面的php应用程序(将询问名称,电子邮件地址注释等,一旦提交,它将只使用邮件功能向管理员发送电子邮件) 。我知道我的观点是什么,我也会使用控制器来渲染视图,但是我的模型应该是什么?我不打算从数据库加载任何东西或将任何东西保存到数据库中。那么在这种情况下我应该跳过模型吗?
答案 0 :(得分:2)
我会说,即使有联系表格,也可以使用模型。
联系表单处理查询,联系表单包含字段,联系表单通常需要某种形式的验证。这可以包含在查询模型中。
事实上,这正是我对CakePHP应用程序所做的。我有一个Enquiry
模型,用于定义字段和数据验证,并将所有查询保存到数据库(用于存档),并具有afterSave
回调方法,通过电子邮件向我发送查询详细信息。我相信你可以在CodeIgniter中做类似的事情。
答案 1 :(得分:1)
Codeigniter中的模型是可选的。如果您不需要,请不要使用。
对于那些想要使用更传统的MVC方法的人,可以选择使用模型。
在您的特定情况下,您不需要模型,因此不必担心制作模型。
答案 2 :(得分:1)
细节中的细节包含在模型中。即使是简单的联系表格也有许多具体的细节:字段名称,特定验证规则等。
控制器是老板 - 验证此表格! 它没有说明如何验证它,并且它不需要表单中每个字段的详细信息。如果表单验证 - 控制器调用下一个视图。如果它没有验证 - 那么控制器再次显示表单并且可能传递特定的错误消息。
联系表单的验证详细信息 - 将其放入模型中。
通过电子邮件发送表单:电子邮件的内容,获取表单值并将其放入电子邮件中,电子邮件发送给谁,实际发送电子邮件的详细信息 - 这些都是模型的工作。
这对我们有什么影响?当您的客户在一年内打电话并说 - 更改电子邮件中的文本 - 您将不会搜索一堆控制器代码。您将查看您的型号名称并确切知道要去哪里。 关注点的分离不仅仅是为了构建 - 它是随着时间的推移发生的不可避免的变化。
修改
是的,业务逻辑应该在模型中。因此,对于联系表格,业务规则可能是 - 我们要求姓名和地址 - 我们需要电子邮件地址和电话号码。验证规则然后履行业务规则。
然后六个月后,您的客户打电话说 - 好吧人们不喜欢我们要求电话号码 - 只需要发送电子邮件。您已将这些验证规则放在模型中 - 因此只有特定模型需要更改。控制器根本没有变化!并且由于您将表单验证规则与将电子邮件发送到单独的模型中分离 - 如果您在更改验证规则时出错 - 则需要更少的代码来查看和调试。
另一种观察方式是 - 方法的具体和“细化”程度如何?它越具体,它应该离控制器越远。由于业务规则的变化,控制器方法很少会改变。
所以当我说控制器命令“验证这个表单”时 - 我只是意味着控制器正在调用模型中的验证方法,然后它返回true或false,无论表单发生什么变化随着时间的推移。
答案 3 :(得分:0)
OP在这里,只想对此进行快速更新。
我查看了CodeIgniter的文档,并惊奇地发现表单验证代码在控制器内部:
http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html#validationrules
哪个IMO不是个好主意。
幸运的是,有一种方法可以清理控制器,这需要您在config文件夹中创建一个表单验证配置文件:
http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html#savingtoconfig
因为我不想重新发明轮子,我想我只是创建配置文件而不创建模型