在主域和子域之间共享缓存的问题

时间:2009-08-19 11:30:25

标签: cakephp

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

提前致谢。

1 个答案:

答案 0 :(得分:2)

与此相关的问题有三个。

使用Cache :: read()和Cache :: write()

手动缓存的数据

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

元素缓存

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

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

    类MyView扩展View { }

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

  5. 在AppController :: beforeFilter()中写

    $ this-> view ='MyView';

  6. 现在您可以控制CakePHP视图层。您刚刚重写了元素方法。 除了这种方法之外(如果您的代码库还没有广泛使用元素),您可以使用一个方法创建一个帮助器,该方法采用与View :: element()方法相同的参数,将子域键添加到缓存选项中调用原始的element()方法。

    整页缓存

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

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

    $Dispatcher = new Dispatcher();
    

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