我想知道像身份验证和登录这样的会话处理是否最好由用户模型处理(假设用户模型指的是用户)并具有电子邮件和密码等属性。还是应该由另一个模型进行会话处理?
究竟什么是最好的方法 - 我的代码几乎部分散布在函数文件的控制器中,并希望重构我的代码以更多地遵守 MVC 原则。我的项目基于 Zend 框架。
我想知道像身份验证和登录这样的会话处理是否最好由用户模型处理(假设用户模型指的是用户)并具有电子邮件和密码等属性。还是应该由另一个模型进行会话处理?
究竟什么是最好的方法 - 我的代码几乎部分散布在函数文件的控制器中,并希望重构我的代码以更多地遵守 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);
我将身份验证和会话管理视为应用程序级别的问题。
我经常应用的一个通用标准是:“我可以在另一个应用程序(可能是命令行应用程序)或另一个网站中使用我的模型吗?
例如,在您的情况下,我会将 User 模型视为代表用户。无论他是否实际访问和/或登录/退出您的网站,该用户都存在。他可以在命令行应用程序中被引用(例如:一个在所有用户生日那天向他们发送电子邮件的 cron 作业;一个统计所有个人资料不完整的用户的报告实用程序);等等。因此,我会将身份验证会话管理保持在控制器级别或服务级别的下一级。
但与大多数事情一样,YMMV。