我的CakePHP中有一个奇怪的行为。
我创建了不同的插件,对于某些插件,我创建了一个设置页面。
通话就像:
[URL] / plugin_one /管理/设定
[URL] / plugin_two /管理/设定
以这种方式创建链接:
$this->Html->link("Setting1", array("plugin" => "plugin_one", "controller" => "admin", "action" => "setting"));
$this->Html->link("Setting2", array("plugin" => "plugin_two", "controller" => "admin", "action" => "setting"));
到目前为止一切顺利。
当我点击"设置1"它正在工作。如果我点击"设置2"我得到了插件一的设置页面。我得到了插件二的设置页面。
BUT:
如果我打开了Plugin One的设置页面,然后尝试打开插件二的设置页面,那么管理员控制器就会以某种方式打开插件管理器。被称为"插件二"。
因为我在控制器动作中设置了页面标题"设置"我看到了这种奇怪的行为。
$this->set("title_for_layout", "Plugin One - Settings");
在我的"设置"动作,我也得到了插件的设置数据:
$this->request->data = $settings["plugin_one"];
例如,我在插件一的设置页面上,我的页面标题是"插件一 - 设置",我的页面内容是"插件一&#34的不同设置选项;
现在我尝试打开"插件二"的设置页面,我的页面标题是"插件一 - 设置",我的页面内容是&#的不同设置选项34;插件二",但我没有从模型中获取设置数据,因为我的请求数据也是"插件一"的请求数据。
有趣的是,这种情况也是如此。
如果我打开"插件二"设置页面,然后尝试打开"插件一"设置页面,它是相同的东西。现在我会看到"插件两个 - 设置"我和#34; Plugin One"使用"插件2和#34;设置页面请求数据。
我认为有一些内部路由问题,您怎么看?
编辑:
我使用"调试工具栏"插件也是。 如果我打电话给#34; Plugin One"设置,在"调试工具栏" - > "包含" - > "插件"我看到" Plugin One"。 现在我打电话给#34; Plugin Two"设置,以及"调试工具栏" - > "包含" - > "插件"我看到" Plugin One"。
编辑#2:
如果我等待大约5分钟(一根香烟;-))并点击F5,那么"插件2"设置页面正确加载,并在“调试工具栏”中。 - > "包含" - > "插件"我看到"插件二"
如果我使用具有相同Controller和Action名称的不同插件,可能会出现内部缓存问题吗?
答案 0 :(得分:0)
我找到了以下解决方案:
重命名控制器......
plugin_one / admin => plugin_one / poAdmin plugin_two / admin => plugin_two / ptAdmin
等等......现在它有效......似乎CakePHP不喜欢不同插件中的多个相同的名称控制器