Я столкнулся с проблемой, связанной с кэшированием, плагинами и дублирующимися именами моделей в Cake 2.0.Мое приложение имеет несколько контроллеров, содержащих только действия для общего пользования (просмотр, индекс и эквиваленты).Данные управляются CMS, которая добавляется как плагин, некоторые имена контроллера плагина совпадают.
Например, в моем приложении есть PostsController и PostsController для плагина.Контроллер плагина расширяет PluginAppController
, а публичный контроллер расширяет AppController
согласно инструкции.Как только начинается кэширование (путем установки debug
в 0
), начинаются проблемы.Cake пытается получить доступ к несуществующему действию add
в контроллере, который расширяет AppController
, а общедоступное приложение пытается получить доступ к методам из PluginAppController
.
Я не понимаю, почему Cake сделал бы этои это создает все виды ошибок (пустые страницы, потерянные сеансы), которые также не регистрируются должным образом.Все работало хорошо, пока приложение все еще работало на Cake 1.3, а также в производственном режиме 2.0.
Файл cake_core_file_map
в каталоге /tmp/cache/persistent/
, кажется, вызывает проблему.Как только я удаляю это и перезагружаю любое из представлений, это отрисовывает правильно.Таким образом, процедура выглядит следующим образом:
Я предполагаю, что Cake не удаетсясохраните правильные ссылки на плагин и основные пути приложения в cake_core_file_map
, но я понятия не имею, как заставить Cake вести себя хорошо в этом отношении.
Кто-нибудь знает, как не дать Cake перепутать контроллеры плагина с другими с дублирующимися именами?
EDIT
Эта проблема может быть связанак ошибке в Cake, так как в этом отчете упоминает похожие проблемы, а также cake_core_file_map
.Упомянутое исправление здесь , к сожалению, не работает.
EDIT 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'));