1

这是我第一次使用 PHP 框架,我对这种设计模式有疑问。

假设我正在尝试构建一个具有联系我们页面的 php 应用程序(它将询问姓名、电子邮件地址评论等,一旦提交,它将简单地使用邮件功能向管理员发送电子邮件)。我知道我的视图会是什么,我也会使用控制器来渲染视图,但我的模型应该是什么?我不会从数据库中加载任何内容或将任何内容保存到数据库中。那么在这种情况下我应该跳过模型吗?

4

4 回答 4

2

我想说,即使有联系表格,模型也有它的用处。

联系表单处理查询,联系表单具有字段,联系表单通常需要某种形式的验证。这可以包含在查询模型中。

事实上,这正是我对 CakePHP 应用程序所做的。我有一个Enquiry模型,它定义了字段和数据验证,并将任何查询保存到数据库(用于存档目的),并有一个afterSave回调方法,可以通过电子邮件向我发送查询详细信息。我相信你可以在 CodeIgniter 中做类似的事情。

于 2013-09-24T19:24:25.820 回答
1

坚韧不拔的细节进入模型。即使是一个简单的联系表单也有很多具体的细节:字段名称、特定的验证规则等。

控制器是老板 - 验证这个表格!它没有说明如何验证它,也不需要表单中每个字段的详细信息。如果表单验证 - 控制器调用下一个视图。如果它没有验证 - 然后控制器再次显示表单并可能传递特定的错误消息。

  • 联系表单的验证详细信息 - 将其放入模型中。

  • 表单的电子邮件发送:电子邮件的内容,获取表单值并将其放入电子邮件中,电子邮件发送给谁,实际发送电子邮件的详细信息 - 这些都是模型的工作。

这对我们有什么好处?当您的客户在一年内致电并说 - 更改电子邮件中的文本 - 您不会在一堆控制器代码中寻找。您将查看您的型号名称并确切知道该去哪里。关注点分离不仅仅是为了构建——它是为了随着时间的推移而发生的不可避免的变化。

编辑

是的,业务逻辑应该在模型中。因此,对于联系表格,业务规则可能是——我们要求提供姓名和地址——并且我们需要电子邮件地址和电话号码。然后验证规则满足业务规则。

六个月后,您的客户打电话说——好吧,人们不喜欢我们要求提供电话号码——只需填写所需的电子邮件即可。您已将这些验证规则放入您的模型中 -因此只有特定模型需要更改。控制器根本没有改变!并且由于您将表单验证规则与电子邮件发送分离到单独的模型中 - 如果您在更改验证规则时犯了错误 - 它需要查看和调试的代码要少得多。

另一种看待方式是 - 该方法有多具体和“粒度”?它越具体,它应该离控制器越远。由于业务规则的更改,控制器方法应该很少更改。

所以当我说控制器命令“验证这个表单”时——我只是说控制器正在调用模型中的验证方法,然后它返回真或假,不管随着时间的推移表单发生了什么变化。

于 2013-09-24T19:20:48.170 回答
1

模型在 Codeigniter 中是可选的。如果你不需要一个,那么就不要使用一个。

对于那些想要使用更传统的 MVC 方法的人来说,模型是可选的。

文档

在您的特定情况下,您不需要模型,因此不必担心制作模型。

于 2013-09-24T18:30:37.037 回答
0

在这里,只想对此进行快速更新。

我查看了 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

因为我不想重新发明轮子,我想我只会创建配置文件而不创建模型

于 2013-09-26T14:28:01.627 回答