我查了typical CakePHP request但找不到解决方法。
起初myThemeCookie
不存在。通过设置此cookie,用户可以选择他/她最喜欢的主题,并且他/她将来会看到该主题。
我有myController
和myAction
。我在myAction.ctp
中有一个表单。用户可以选择主题名称。
首次请求myAction
检查$_POST
。它找不到任何价值。动作仅显示表单。
在第二个请求中,当用户提交表单时,我再次将用户发送到myAction
。操作找到$_POST
数据。从$_POST
获取主题css地址。使用myComponent
,即会写入myThemeCookie
。
然后我有myLayout.ctp
个文件。此布局文件使用myHelper
并使用myHelper->getCookieTheme()
,它从Cookie中获取主题名称。但帮助者给出了空名。因此用户可以看到旧主题的字体。 (请注意,我使用帮助程序中的$_COOKIE
变量检查cookie数据)
当我刷新myAction页面并发出第三个请求时,我看到myHelper->getCookieTheme()
给出了正确的css文件名。用户可以看到新主题的字体。
因此,在myAction中设置cookie之后,我无法在我的帮助方法和布局文件中看到它。但似乎在控制器操作之后计算视图/帮助程序文件。我想念一下吗?
答案 0 :(得分:0)
您根本不必在视图中执行此操作。也不要直接访问$ _POST,而是在控制器中使用请求对象$ this-> request。
在AppController中有一个类似checkThemeFromCookie()的方法,并在beforeRender()中调用它,并从cookie中读取主题,如果值不为空,只需执行$ this-> theme = $ themeFromCookie。如果cookie为空,只需离开该属性或设置所需的任何默认主题。
参考