【问题标题】:CakePHP controller action setting cookie and passing to helperCakePHP 控制器动作设置 cookie 并传递给助手
【发布时间】:2013-09-16 21:42:11
【问题描述】:

我检查了typical CakePHP request,但找不到解决方案。

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

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

第一次请求myAction 检查$_POST。它找不到任何价值。动作只显示形式。

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

然后我有myLayout.ctp 文件。此布局文件使用myHelper,并通过使用myHelper->getCookieTheme(),从cookie 中获取主题名称。但是助手给出了空名。所以用户会看到旧主题的字体。 (请注意,我通过在 helper 中使用 $_COOKIE 变量来检查 cookie 数据)

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

所以,当我在 myAction 中设置了一个 cookie 后,我无法在我的辅助方法和布局文件中看到它。但似乎视图/帮助文件是在控制器操作之后计算的。我错过了什么吗?

【问题讨论】:

    标签: php cakephp cakephp-2.0 http-post


    【解决方案1】:

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

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

    参考文献

    【讨论】:

    • 我对主题文件使用 CDN。所以我将 HTML 传递给我的布局/助手。是否可以设置 $this->theme.并在 layout/helper 中访问它?
    • 我将在我的派生控制器中使用public $theme="mytheme" 创建新变量并从 AppController 设置它?我不明白在哪里设置$this->theme
    • 它不是一个变量而是一个属性。如果您在从 AppController 派生的控制器中进行设置,您将覆盖您在 AppController 中设置的内容。 OOP 基础知识。既然你想(我猜是这样)将主题应用到任何地方,你就必须进行 cookie 检查并在 AppController 中设置主题。如果不把检查放在 AppController 中,并在需要它的控制器中设置。
    • CDN 主题文件?定义什么是你的主题。你读过我提供的链接吗?我认为我们谈论的是两件不同的事情。资产与主题视图。
    • 我在布局文件中包含“my_theme.css”文件。关于用户的选择文件名改变。文件存在于 CDN 中,关于 cookie,我设置了一个 URL 并将其包含在我的 layout.ctp 文件中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    相关资源
    最近更新 更多