【发布时间】:2009-08-19 11:30:25
【问题描述】:
正如我之前发布的,我正在开发一个用 CakePHP 完成的两种语言的网站。 现在我在我的应用程序中面临的最新问题是应用程序没有在主域和子域之间共享缓存值。请帮我摆脱这个混乱......!!!
提前致谢。
【问题讨论】:
标签: cakephp
正如我之前发布的,我正在开发一个用 CakePHP 完成的两种语言的网站。 现在我在我的应用程序中面临的最新问题是应用程序没有在主域和子域之间共享缓存值。请帮我摆脱这个混乱......!!!
提前致谢。
【问题讨论】:
标签: cakephp
与此相关的有 3 个问题。
使用方法时,只需为每个子域使用前缀即可。
您可以按照以下步骤“几乎”优雅地解决这个问题:
内容:
类 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();
...到你的新班级名称。
【讨论】: