所以,我喜欢CakePHP并使用很多。当2.0出现时,我很高兴看到AuthComponent在整个应用程序中作为静态类可用,这使得很多事情变得更容易 - 即您不再需要将用户数据作为模型方法的参数传递。
最近在一个项目中,我发现需要从Model访问SessionComponent的方法。具体而言,当用户登录时,将执行一些检查以查看用户是否具有对站点的有效订阅。这一切都在模型中完成。如果用户不再拥有有效订阅,则可能存在一些原因。从模型返回false
似乎最简单,同时设置一条flash消息,说明过期订阅的原因。而不是像这样返回一个数组:
array('status' => 0, 'message' => 'You\'re not welcome here anymore')
需要在控制器中解释。
还有一些时候我想在模型中处理会话,但这是我想到的例子。
所以,我想知道,我是否正确想要访问模型中的SessionComponent?我有这个需要时,我应该直接使用$ _SESSION吗?或者我做错了 - 是否有更好的编码方法?
答案 0 :(得分:2)
你可以随时使用
CakeSession::read()
您应用中的任何位置。在模型中也是如此。 请参阅以前的帖子,例如Reading a session variable inside a behavior in cakephp 2
但请注意,如果可能的话,你应尽量避免使用它。 模型应该尽可能无状态 - 将它们与会话混合会使模糊越来越模糊。
答案 1 :(得分:1)
根据CakePHP cookbook:
通常在CakePHP中避免使用$ _SESSION,而是使用 首选使用Session类。
有几种不同的配置,您可以存储会话数据,f.ex。在数据库中。因此,通过使用CakeSession
更改会话配置不会影响您访问会话数据的每个位置。
我建议不要使用模型中的SessionComponent。使用必要的数据更好地将参数传递给模型。看看Understanding Model-View-Controller。
答案 2 :(得分:1)
将会话控制传递给模型会违反MVC。您应该使用模型来做出决策,并使用控制器将这些决策反映到应用程序中。在一个正确的MVC环境中,模型甚至不会知道你使用会话而不是操纵它。
此外,使用$ _SESSION var违反了框架封装。如果你发现自己需要这样做,是的,你在某个地方出了问题。
答案 3 :(得分:0)
您可以使用Authcomponent
和session
App::uses('AuthComponent', 'Controller/Component');
App::import('Component', 'Session');
您可以使用以下功能编写和读取数据
CakeSession::write('Auth.User.id', '1');
debug(CakeSession::read());