Model view controller 在MVC中-是会话处理&;要由用户模型处理的身份验证?

Model view controller 在MVC中-是会话处理&;要由用户模型处理的身份验证?,model-view-controller,zend-framework,session,Model View Controller,Zend Framework,Session,我想知道,像身份验证和登录这样的会话处理是否最好由用户模型(假设用户模型指的是用户)处理,并且具有电子邮件和密码等属性。或者会话处理应该由另一个模型进行 做这件事的最佳方法是什么?我的代码几乎部分地散落在函数文件中的控制器中,我想重构我的代码,使之更符合MVC原则。我的项目基于Zend框架。在MVC概念中,模型代表应用程序的业务部分 管理用户的身份验证、保存、删除和激活是业务问题 因此,在您的用户模型中创建一个直接进行身份验证、保存、删除和激活的方法是有意义的 因此,在您的用户模型中,最好实现以

我想知道,像身份验证和登录这样的会话处理是否最好由用户模型(假设用户模型指的是用户)处理,并且具有电子邮件和密码等属性。或者会话处理应该由另一个模型进行


做这件事的最佳方法是什么?我的代码几乎部分地散落在函数文件中的控制器中,我想重构我的代码,使之更符合MVC原则。我的项目基于Zend框架。

在MVC概念中,模型代表应用程序的业务部分

管理用户的身份验证、保存、删除和激活是业务问题

因此,在您的用户模型中创建一个直接进行身份验证、保存、删除和激活的方法是有意义的

因此,在您的用户模型中,最好实现以下方法

public static function authenticate ($ username, $ password)
{
     $authService = $this-> getServiceLocator()->get('Zend\Authentication\AuthenticationService');
     $adapter = $authService->getAdapter();
     $adapter->setIdentityValue($username);
     $adapter->setCredentialValue($password);
     $authResult = $authService->authenticate();

     return $authResult->isValid();
}
在控制器中,您可以直接执行以下操作:

User/Entity/User::authenticate($username, $password);

我将身份验证和会话管理视为应用程序级关注点

我经常使用的一个标准是:“我可以在其他应用程序(可能是命令行应用程序)或其他网站上使用我的模型吗

例如,在您的情况下,我会将用户模型视为代表一个用户。该用户的存在与他是否实际访问和/或登录/注销您的网站无关。他可以在命令行应用程序中被引用(例如:在所有用户生日时向其发送电子邮件的cron作业;统计所有配置文件不完整的用户的报告实用程序);等等。因此,我将在控制器级别或服务级别下保持身份验证会话管理


但是在大多数情况下,.

LoL,当您必须在静态上下文中调用它时,必须使用静态方法。为了检查是否可以进行身份验证而实例化用户并不是很聪明。因此,我们在静态上下文中,我们不知道是否可以在对该用户进行身份验证之前实例化该用户。在OOP中,静态方法具有真实的UTI你只需要明智地使用它。有意义-需要对我的代码进行一些修改-谢谢你的帮助!