Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cakephp 在主域和子域之间共享缓存时出现问题_Cakephp - Fatal编程技术网

Cakephp 在主域和子域之间共享缓存时出现问题

Cakephp 在主域和子域之间共享缓存时出现问题,cakephp,Cakephp,正如我之前发布的,我正在用CakePHP开发一个两种语言的网站。 现在,我在我的应用程序中面临的最新问题是,应用程序没有在主域和子域之间共享缓存值。请帮助我摆脱这一困境 提前感谢。与此相关的问题有三个 使用Cache::read()和Cache::write()手动缓存的数据 使用这些方法时,只需为每个子域使用一个前缀 元素缓存 您可以通过以下步骤优雅地解决此问题: 在app/views中创建my_view.php(或任何内容) 内容: 类MyView扩展了视图{ } 在Cake Core中搜索

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


提前感谢。

与此相关的问题有三个

使用Cache::read()和Cache::write()手动缓存的数据 使用这些方法时,只需为每个子域使用一个前缀

元素缓存 您可以通过以下步骤优雅地解决此问题:

  • 在app/views中创建my_view.php(或任何内容)
  • 内容:

    类MyView扩展了视图{ }

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

  • 在AppController::beforeFilter()中写入

    $this->view='MyView'

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

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

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

    $Dispatcher = new Dispatcher();
    

    …添加到您的新类名。

    您能告诉我如何在读写缓存时添加子域。如何在此缓存中添加子域::read()和Cache::write(),您只需在缓存键前面加上您的子域标识符,即Cache::write(当前子域。“\u recents\u posts',$data,'1 day');