Zend框架用户身份验证(MVC问题)

时间:2011-06-08 14:08:18

标签: model-view-controller zend-framework authentication zend-auth

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

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

说到用户身份验证,你当然应该在Users模型中实现authenticate功能,我认为你会对表或类似的数据库进行数据库检查。 如果你还没有使用它,Zend附带了一个用于验证的软件包:Zend_Auth(http://framework.zend.com/manual/en/zend.auth.html),它可以加快你的安全性。应用

答案 1 :(得分:1)

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

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

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

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

按照Zend Framework快速入门指南,Zend Framework中有关于MVC的基础知识。此外,您还可以找到有关Zend_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。