2

所以,我喜欢 CakePHP 并经常使用它。当 2.0 出现时,我很高兴地看到 AuthComponent 作为静态类在整个应用程序中可用,这使很多事情变得更加容易 - 即您不再需要将用户数据作为参数传递给模型方法。

最近在一个项目中,我意识到需要从模型中访问 SessionComponent 的方法。具体来说,当用户登录时,会执行一些检查以查看用户是否拥有对该站点的有效订阅。这一切都在模型中完成。如果用户不再拥有有效的订阅,可能有几个原因。从模型中返回似乎最容易false,同时设置一个闪烁消息,说明过期订阅的原因。而不是像这样返回一个数组:

array('status' => 0, 'message' => 'You\'re not welcome here anymore')

这需要在控制器中解释。

还有其他时候我想处理模型中的会话,但这是我想到的例子。

所以,我想知道,我想访问模型中的 SessionComponent 是否正确?当我有这个需要时,我应该直接使用 $_SESSION 吗?还是我做错了-有更好的编码方法吗?

4

4 回答 4

2

你可以随时使用

CakeSession::read()

应用程序中的任何位置。在模型中也是如此。请参阅以前的帖子,例如在 cakephp 2 中的行为中读取会话变量

但请注意,如果可能,您应该尽量避免它。模型应该尽可能无状态 - 将它们与会话混合会使它变得越来越模糊。

于 2012-09-27T09:07:27.413 回答
1

根据 CakePHP食谱

在 CakePHP 中通常避免使用 $_SESSION,而是首选使用 Session 类。

有几种不同的配置可以存储会话数据,f.ex。在数据库中。因此,通过CakeSession更改会话配置不会影响您访问会话数据的每个地方。

我建议不要使用模型中的 SessionComponent。使用必要的数据更好地将参数传递给模型。看看了解模型-视图-控制器

于 2012-09-27T16:15:47.073 回答
1

将会话控制传递给模型违反了 MVC。您应该使用模型来做出决策,并使用控制器将这些决策反映到应用程序中。在正确的 MVC 环境中,模型甚至不知道您正在使用会话,更不用说操纵它了。

此外,使用 $_SESSION 变量违反了框架封装。如果您发现自己要这样做,是的,您在某个地方出错了。

于 2012-09-28T21:30:45.117 回答
0

Authcomponent您可以使用和在模型中的会话中写入和读取数据session

App::uses('AuthComponent', 'Controller/Component');
App::import('Component', 'Session');

您可以使用以下功能写入和读取数据

CakeSession::write('Auth.User.id', '1');
debug(CakeSession::read());
于 2013-04-18T04:35:34.107 回答