Why is session data only available in the controller in CakePHP?
因此,我喜欢CakePHP并大量使用它。当2.0发布时,我很高兴看到AuthComponent可以作为一个静态类在整个应用程序中使用,这使很多事情变得更加容易-即,您不再需要将用户数据作为参数传递给模型方法。 >
最近在一个项目上,我已经意识到需要从模型访问SessionComponent的方法。具体来说,当用户登录时,将执行一些检查以查看该用户是否对该站点具有有效的订阅。这一切都在模型中完成。如果用户不再具有有效的订阅,则可能有几个原因。从模型返回
1 | array('status' => 0, 'message' => 'You\'re not welcome here anymore') |
需要在控制器中进行解释。
还有几次我想处理模型中的会话,但这是我想到的例子。
因此,我想知道,我是否想访问模型中的SessionComponent吗?有这种需要时,我应该直接使用$ _SESSION吗?还是我做错了事-有更好的编码方法吗?
您可以随时使用
1 | CakeSession::read() |
您的应用程序中的任何位置。在模型中也是如此。
参见以前的文章,例如在cakephp 2
中读取行为内的会话变量
但请注意,如果可能,应尽量避免使用它。
模型应该尽可能地是无状态的-将它们与会话混合会变得越来越模糊。
将会话控制传递给模型违反了MVC。您应该使用模型来做出决策,并使用控制器将那些决策反映到应用程序中。在正确的MVC环境中,模型甚至都不知道您使用的会话要少得多。
此外,使用$ _SESSION var违反了框架封装。如果您发现需要这样做,是的,您在某个地方出错了。
根据CakePHP食谱:
Usage of the $_SESSION is generally avoided in CakePHP, and instead
usage of the Session classes is preferred.
有几种不同的配置可以存储会话数据f.ex。在数据库中。因此,通过使用
我建议不要使用模型中的SessionComponent。更好地将参数与必要的数据传递给模型。看看了解模型-视图-控制器。
您可以使用
在模型中的会话中写入和读取数据
1 2 | App::uses('AuthComponent', 'Controller/Component'); App::import('Component', 'Session'); |
,您可以使用以下功能写入和读取数据
1 2 | CakeSession::write('Auth.User.id', '1'); debug(CakeSession::read()); |