我正在开发一个PHP应用程序,就像练习一样,我想知道会话创建在哪里更正确。
我在控制器中收到登录数据,然后我问我的模型是否存在该用户以及密码是否匹配。这个控制器应该处理会话创建吗?我只是找不到一个好的答案。
答案 0 :(得分:3)
会话处理程序可以是根据需要在任何控制器中注入的组件,也可以是应用程序范围的单例。
我会在中型应用上采用第一种方法,并在微框架中使用后者,其中依赖性较小。
答案 1 :(得分:2)
首次使用该存储介质时,应初始化会话。
最有可能是:
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()
方法。
基本上,从模型层的角度来看,会话只是另一种类型的存储,您可以使用某种映射器。这个映射器可以使用工厂在整个应用程序中共享,这可以确保模型层的所有部分都使用相同的对象来抽象会话。
控制器不应该甚至意识到会话是在模型层的某个地方使用的。控制器只知道模型层的一部分应该是控制器改变模型层状态的服务。
答案 2 :(得分:1)
您的应用程序都有一个引导程序文件,您可以在那里启动会话。 如果你的Session-Class有自动启动,那么在大多数情况下你都不关心它。如果您的MVC实现了拦截器模式,您可以为其创建一个插件,以启动您的会话。
控制器中的创建会话产生还原代码,其中一个重要原则是DRY(不要重复自己)。
答案 3 :(得分:-1)
您可以查看通常与MVC模式一起使用的“Front Controller”模式。
来自http://en.wikipedia.org/wiki/Front_Controller_pattern