У меня странное поведение в 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"));
Все идет нормально.
Он работает, когда я нажимаю "Setting1", я получаю страницу настроек для плагина One, если я нажму "Setting2", я получу страницу настроек для плагина Two.
НО:
Если я открыл страницу настроек для плагина One, а затем попытаюсь открыть страницу настроек для плагина Two, как-то вызывается контроллер администратора "Plugin One", с представлением "Plugin Two".
Поскольку я задал заголовок страницы в действии "настройки" контроллера, я вижу это странное поведение.
$this->set("title_for_layout", "Plugin One - Settings");
В рамках моего действия "настройка" я также получаю данные настройки плагина:
$this->request->data = $settings["plugin_one"];
Так, например, я на странице настроек плагина One, мой заголовок страницы - "Plugin One - Settings", мое содержимое страницы - это разные параметры настройки "Plugin One".
Теперь я пытаюсь открыть страницу настроек "Плагин 2", а заголовок моей страницы - "Плагин Один - Настройки", содержимое моей страницы - это разные параметры настройки "Плагин два", но я не получаю данные настроек из потому что мои данные запроса также являются данными запроса "Plugin One".
Самое смешное, это происходит так же.
Если я запустил страницу настроек "Плагин два", а затем попытаюсь открыть страницу настроек "Плагин один", это то же самое. Теперь я увижу заголовок "Plugin Two - Settings" на странице настроек "Plugin One" с данными запроса "Plugin Two".
Я думаю, что есть некоторые проблемы с внутренней маршрутизацией, что вы думаете?
Редактировать:
Я также использую плагин "Debug Toolbar". Если я называю "Plugin One" Settings, в "Debug Toolbar" → "Включить" → "Плагины", я вижу "Плагин один". Теперь я называю "Plugin Two" Settings, а в "Debug Toolbar" → "Включить" → "Плагины" я вижу "Плагин один".
Редактировать # 2:
Если я подождал около 5 минут (одна сигарета ;-)) и ударил F5, страница настроек "Plugin Two" загружена правильно, а внутри "Debug Toolbar" → "Включить" → "Плагины" я вижу "Плагин 2 "
Может ли быть проблема внутреннего кэширования, если я использую разные плагины с теми же именами контроллера и действия?
Я нашел следующее решение:
Переименовал контроллер...
plugin_one/admin => plugin_one/poAdmin plugin_two/admin => plugin_two/ptAdmin
и т.д...
Теперь это работает... похоже, что CakePHP не любит несколько одинаковых контроллеров namend в разных плагинах