【发布时间】:2011-12-27 17:07:31
【问题描述】:
我遇到了与 Cake 2.0 中的缓存、插件和重复模型名称有关的问题。我的应用程序有几个控制器只包含供公众使用的操作(视图、索引和等效项)。数据由作为插件添加的 CMS 管理,插件控制器的某些名称相同。
例如,我的应用程序中有一个 PostsController,插件有一个 PostsController。根据手册,插件控制器扩展PluginAppController,公共控制器扩展AppController。一旦启动缓存(通过将debug 设置为0),问题就开始了。 Cake 尝试访问控制器中不存在的 add 操作,该操作扩展了 AppController,公共应用程序尝试访问来自 PluginAppController 的方法。
我不明白为什么 Cake 会这样做,它会产生各种错误(空白页面、丢失的会话),这些错误也没有被正确记录。当应用程序仍然在 Cake 1.3 和 2.0 生产模式下运行时,一切都运行良好。
/tmp/cache/persistent/ 目录中的文件 cake_core_file_map 似乎是导致问题的原因。一旦我删除它并重新加载任何一个视图,它就会正确呈现。所以程序如下:
- 加载
http://www.example.com/admin/posts成功; - 加载
http://www.example.com/posts(渲染失败); - 清除缓存(或只是 cake_core_file_map);
- 加载
http://www.example.com/posts成功; - 加载
http://www.example.com/admin/posts(现在无法正确加载)。
我的猜测是 Cake 无法在 cake_core_file_map 中保存对插件和主应用程序路径的正确引用,但我不知道如何强制 Cake 在这方面表现得很好。
有人知道如何阻止 Cake 将插件的控制器与其他名称重复的控制器混淆吗?
编辑
这个问题可能与 Cake 中的一个错误有关,因为 this report 提到了类似的问题,cake_core_file_map 也提到了类似的问题。不幸的是,提到的修复 here 不起作用。
编辑 2
确实有一些自定义路由正在进行,这在 Cake 1.3 中正常工作。这是来自routes.php:
Router::connect('/plugin_name', array('plugin' => 'plugin_name', 'controller' => 'users', 'action' => 'login'));
Router::connect('/admin/*', array('plugin' => 'plugin_name', 'controller' => 'posts', 'action' => 'index'));
【问题讨论】:
标签: cakephp caching cakephp-2.0