CakePHP控制器动作设置cookie并传递给帮助者

时间:2013-09-16 13:26:45

标签: php cakephp cakephp-2.0 http-post

我查了typical CakePHP request但找不到解决方法。

起初myThemeCookie不存在。通过设置此cookie,用户可以选择他/她最喜欢的主题,并且他/她将来会看到该主题。

我有myControllermyAction。我在myAction.ctp中有一个表单。用户可以选择主题名称。

首次请求myAction检查$_POST。它找不到任何价值。动作仅显示表单。

在第二个请求中,当用户提交表单时,我再次将用户发送到myAction。操作找到$_POST数据。从$_POST获取主题css地址。使用myComponent,即会写入myThemeCookie

然后我有myLayout.ctp个文件。此布局文件使用myHelper并使用myHelper->getCookieTheme(),它从Cookie中获取主题名称。但帮助者给出了空名。因此用户可以看到旧主题的字体。 (请注意,我使用帮助程序中的$_COOKIE变量检查cookie数据)

当我刷新myAction页面并发出第三个请求时,我看到myHelper->getCookieTheme()给出了正确的css文件名。用户可以看到新主题的字体。

因此,在myAction中设置cookie之后,我无法在我的帮助方法和布局文件中看到它。但似乎在控制器操作之后计算视图/帮助程序文件。我想念一下吗?

1 个答案:

答案 0 :(得分:0)

您根本不必在视图中执行此操作。也不要直接访问$ _POST,而是在控制器中使用请求对象$ this-> request。

在AppController中有一个类似checkThemeFromCookie()的方法,并在beforeRender()中调用它,并从cookie中读取主题,如果值不为空,只需执行$ this-> theme = $ themeFromCookie。如果cookie为空,只需离开该属性或设置所需的任何默认主题。

参考