我正在开发一个 PHP 应用程序作为练习,我想知道在哪里创建会话会更正确。
我在控制器中接收登录数据,然后询问我的模型该用户是否存在以及密码是否匹配。这个控制器应该处理会话创建吗?我只是找不到一个好的答案。
我正在开发一个 PHP 应用程序作为练习,我想知道在哪里创建会话会更正确。
我在控制器中接收登录数据,然后询问我的模型该用户是否存在以及密码是否匹配。这个控制器应该处理会话创建吗?我只是找不到一个好的答案。
会话处理程序可以是按需注入任何控制器的组件,也可以是应用程序范围的单例。
我会在中型应用程序上使用第一种方法,并在依赖较少的微框架中使用后者。
当您第一次使用该存储介质时,应初始化会话。
最有可能是:
namespace Mapper;
class Session
{
public function prepare()
{
session_set_cookie_params( ... ); // if needed
session_start();
}
public function store(SomeInterface $object) { ... }
public function retrieve(SomeInterface $object) { ... }
}
.. 在prepare()
工厂将会话实例发布到“通用应用程序”之前,在其中调用方法。
基本上,从模型层的角度来看,会话只是另一种类型的存储,您可以使用某种映射器。这个映射器可以使用工厂在整个应用程序中共享,这确保模型层的所有部分都使用相同的对象来抽象会话。
控制器甚至不应该意识到会话在模型层的某个地方被使用。只有控制器知道的模型层的一部分应该是服务,控制器通过它改变模型层的状态。
您的应用程序有一个引导文件,您可以在那里启动您的会话。如果您的 Session-Class 具有自动启动功能,那么在大多数情况下您并不关心它。如果您的 MVC 实现了拦截器模式,您可以为此创建一个插件来启动您的会话。
控制器中的创建会话产生冗余代码,重要原则之一是 DRY(不要重复自己)。
您可以查看 MVC 模式常用的“前端控制器”模式。
来自http://en.wikipedia.org/wiki/Front_Controller_pattern