【问题标题】:Duplicate controller names from different plugins来自不同插件的重复控制器名称
【发布时间】:2013-01-22 14:15:55
【问题描述】:

我有一个关于 Cakephp2.3 文件加载系统的问题。

我有两个插件 - 我们称它们为“联系人”和“经理”,加载如下:

CakePlugin::load('Contacts');
CakePlugin::load('Managers');

它们每个都有一个名为“DashboardController.php”的控制器,带有一个 index() 操作。

当我尝试访问“联系人”的仪表板页面时,有时我会看到以下错误:

Error: Class "ManagersAppController" not found

即使网址看起来像这样:

http://mysite.com/contacts/dashboard

我读到 Cakephp2.3 不支持命名空间,这可能是因为我有两个同名的 php 类 (DashboardController.php)。同时,我知道 Cake 应该先映射插件名称,所以它应该能够处理重复的文件名。

你知道为什么我会看到这个随机错误吗?

感谢您的帮助。

【问题讨论】:

    标签: plugins cakephp-2.3


    【解决方案1】:

    我刚刚从开发 CakePHP 的人那里找到了答案。事实上,你不能拥有两个同名的控制器或模型,即使它们位于不同的插件中。

    这只发生在 CakePHP2.x 中,我引用:

    这是 Cake2.x 和延迟加载方法的一个已知限制 使用 App::uses()

    你可以在这里看到我的问题和他们的回答:http://cakephp.lighthouseapp.com/projects/42648-cakephp/tickets/3558-loading-file-from-a-different-plugin

    解决方案是重命名具有冲突名称的控制器/模型和/或使用插件名称命名插件中的所有控制器和模型(例如,DashboardController.php 将变为 ContactsDashboardController.php)

    【讨论】:

    • +1 - 在 3.x 之前,这似乎是一个可以接受的答案。我刚刚经历了同样的事情,将应用程序从 1.3 升级到 2.3。 (也会影响模型 - 例如,两个插件,每个插件都有一个 Category 模型。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 2015-04-12
    • 2014-06-07
    相关资源
    最近更新 更多