【问题标题】:Problem in sharing Cache between main domain and subdomain主域和子域共享缓存的问题
【发布时间】:2009-08-19 11:30:25
【问题描述】:

正如我之前发布的,我正在开发一个用 CakePHP 完成的两种语言的网站。 现在我在我的应用程序中面临的最新问题是应用程序没有在主域和子域之间共享缓存值。请帮我摆脱这个混乱......!!!

提前致谢。

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    与此相关的有 3 个问题。

    使用 Cache::read() 和 Cache::write() 手动缓存的数据

    使用方法时,只需为每个子域使用前缀即可。

    元素缓存

    您可以按照以下步骤“几乎”优雅地解决这个问题:

    1. 在 app/views 中创建 my_view.php(或其他)
    2. 内容:

      类 MyView 扩展视图 { }

    3. 在 Cake Core 中搜索 view.php 并将 element() 方法复制到新创建的类中。在缓存发生的部分添加您的子域前缀

    4. 在你的 AppController::beforeFilter() 中写

      $this->view = 'MyView';

    现在您可以控制 CakePHP 视图层了。您刚刚覆盖了元素方法。 替代这种方法(如果您的代码库尚未广泛使用元素),您可以创建一个带有方法的助手,该方法采用与 View::element() 方法相同的参数,将子域键添加到缓存选项和调用原始 element() 方法。

    整页缓存

    这是一个棘手的问题。在您有可能修改行为之前,整个页面缓存发生在 dispatch() 方法中。第二个问题是,CakePHP 使用页面的相对 URL 来缓存它。在您的不同子域下,相对 URL 很可能是相同的。

    我认为这里最简单的方法是创建一个 Dispatcher 类,它扩展了原来的 Dispatcher。覆盖 cached() 方法并实现你想要的行为,比如前缀。然后在你的 app/webroot/index.php 你需要改变这一行

    $Dispatcher = new Dispatcher();
    

    ...到你的新班级名称。

    【讨论】:

    • 你能告诉我如何在读写缓存时添加子域。如何在这个 Cache::read() 和 Cache::write() 中添加子域
    • 您只需在缓存键前面加上您的子域标识符,即 Cache::write( CURRENT_SUBDOMAIN . '_recent_posts', $data, '1 day' );
    猜你喜欢
    • 2015-04-12
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 2019-01-28
    • 2016-10-09
    • 2018-11-29
    相关资源
    最近更新 更多