2

我一直在使用会话、MVC 设计和面向对象的 PHP。我应该在哪里保存或检索会话中的数据?我想从方法中检索它,所以我不必将数据传递给方法。最佳做法是什么?

4

5 回答 5

3

我通常把它放在控制器中。这是有道理的。控制器决定发生什么以及为什么不让它决定是否允许人们执行请求的操作。通常,您在 MVC 系统中有多个控制器。例如。BaseController(抽象 - 通用),NonSessionController 扩展 BaseController(例如:用于静态页面),SessionController 扩展 BaseController(这里主要会话处理 - 这可能是抽象的)。例如,如果您有不同的用户类型,您可能希望对这个控制器进行多态化,例如:AdminController、UserController 等。

于 2008-10-04T18:59:45.187 回答
3

就个人而言,我是Zend_Session包装类的忠实粉丝。我更喜欢以面向对象的风格处理数据,使用包装器的命名空间优势是一个巨大的优势。

你觉得这些中哪一个更好看?

$_SESSION['Zend_Auth']['user'] = "myusername";

或者

$authNamespace = new Zend_Session_Namespace('Zend_Auth');
$authNamespace->user = "myusername";

我更喜欢使用访问器给你的外观。

注意:在 MVC 系统中,无论您选择哪种方法,您都应该始终在控制器中获取/设置会话数据。

于 2008-10-04T20:30:57.017 回答
1

我已经尝试了几种方法,包括使用静态包装类来处理它,但我总是回到只使用超全局数组本身。我仍然使用包装器进行身份验证检查和其他重复性任务,但最终,使用库存设置对我来说更容易且不那么冗长。

于 2008-10-04T17:46:41.653 回答
0

我认为这取决于检索数据的使用范围,如果它仅在方法内部使用,那么为什么应该在外部检索它,并且会话始终在超全局变量中可用,最好仅在需要时对其进行本地化.

于 2008-10-04T18:01:58.457 回答
0

我不会打扰会话包装器。你不会获得足够的收益来承受这些限制。通过超全局允许您使用任何类型的(希望是理智的)您想要的数据结构。我的会话数据总是以 2 级或更多级别的数组数据结束,这太繁琐而无法通过会话包装器进行管理。

超全局甚至不限制您让 PHP 使用保存处理程序将会话数据存储在数据库中,这对于可伸缩性非常有利。

于 2008-10-04T19:00:28.243 回答