Duplicate controller names from different plugins

2019-05-11 13:50发布

I have a question regarding the file loading system from Cakephp2.3.

I have two plugins - let's call them "Contacts" and "Managers", loaded like this:

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

Each of them has a controller called "DashboardController.php" with an index() action.

When I try to access the dashboard page for "Contacts", sometimes I see the following error:

Error: Class "ManagersAppController" not found

even though the url looks like this:

http://mysite.com/contacts/dashboard

I read that Cakephp2.3 doesn't support namespaces and this might happen because I have two php classes (DashboardController.php) with the same name. At the same time, I know that Cake should map the plugin name first, so it should be able to handle duplicate file names.

Do you have any idea why I'm seeing this random error?

Thanks for your help.

1条回答
叛逆
2楼-- · 2019-05-11 14:03

I just found the answer from the guys the developed CakePHP. Indeed, you can't have two controllers or models with the same name, even though they are located in different plugins.

This happens only in CakePHP2.x and I quote:

This is a known limitation of Cake2.x and the lazy loading approach using App::uses()

You can see my question and their answer here: http://cakephp.lighthouseapp.com/projects/42648-cakephp/tickets/3558-loading-file-from-a-different-plugin

The solution is to rename the controllers/models with conflicting names and/or name all controllers and models from a plugin using the plugin name (ex. DashboardController.php will become ContactsDashboardController.php)

查看更多
登录 后发表回答