1

我在理解 MVC 概念时遇到了一些麻烦。

我正在建立一个用户模型,你知道吗?应用程序_模型_用户。他们说模型应该只包含结构......并且业务逻辑应该放在控制器中。

因此,考虑一个名为 authenticate($user, $password) 的函数。如果输入的用户名和密码有效,此函数将返回 true,否则返回 false。我应该把这个功能放在哪里?在控制器身份验证或模型用户中?

谢谢!

4

2 回答 2

1

虽然 Model 操作通常包括存储操作(DB、servicer 等),但不限于此。据我所知,模型应该包括业务逻辑实体,即代表您的业务实体的类,如 User、Person、Customer 等。每个类都应该定义自己的操作方法,例如,Person 模型类应该让你得到一个人的名字,根据他/她的出生日期计算他/她的年龄等。

此外,还应该有专门的模型存储和检索类。使用这些类,您可以使用某些条件等获取所有客户或仅一个客户,或保存修改后的客户类实例(例如,客户更改了他/她的地址或电话号码)。

这将存储/检索操作与业务登录操作分开。

因此,根据您的问题,您的模型可能有一个类,允许您通过用户名和密码找到一个用户。如果找到用户,您可以返回一个 Model_User 类实例(在示例中)。然后,使用标准的 Zend_Auth 类,或者扩展它来创建你自己的认证类,你可以使用一些登录表单参数来执行用户认证。

按照 Zend Framework 快速入门指南,Zend Framework 中有关于 MVC 的基础知识。此外,您还可以在那里找到一些关于 Zend_Db 和相关类的资源,以允许 DB 交互。还有 Zend_Db_Table、Zend_Db_Table_Rowset 和 Zend_Db_Table_Row 类,您可以扩展它们以满足您的模型存储需求。

我有一个个人解决方案,我为我的(例如)Model_UserTable 类扩展 Zend_Db_Table,用于存储或查询我的 Model_User 实体。我的 Model_User 类扩展了 Zend_Db_Table_Row。

于 2011-06-08T21:46:29.817 回答
1

与模型相关,当您需要检索数据(从数据库、Web 服务、文件系统)或保存数据时,您需要一个模型来完成这项工作。在 MVC 中,模型不被理解为映射表,可能更像一个映射器。Zend 在他们的网站上有一些关于这个的信息,它可以帮助你更多地理解 mvc。

当涉及到用户身份验证时,您当然应该在 Users 模型中实现身份验证功能,我认为您将针对表或类似内容进行数据库检查。以防万一您还没有使用它,Zend 附带了一个用于 auhtentication 的包:Zend_Auth (http://framework.zend.com/manual/en/zend.auth.html),它可以加快实现安全性应用。

于 2011-06-08T15:19:45.690 回答