3

Cakephp2.3 からのファイル読み込みシステムについて質問があります。

私は2つのプラグインを持っています - それらを「連絡先」と「マネージャー」と呼びましょう。

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

それぞれに、index() アクションを備えた「DashboardController.php」というコントローラーがあります。

「連絡先」のダッシュボード ページにアクセスしようとすると、次のエラーが表示されることがあります。

Error: Class "ManagersAppController" not found

URLは次のようになりますが:

http://mysite.com/contacts/dashboard

私は、Cakephp2.3 が名前空間をサポートしていないことを読みました。これは、同じ名前の 2 つの php クラス (DashboardController.php) があるために発生する可能性があります。同時に、Cake は最初にプラグイン名をマップする必要があることを知っているので、重複したファイル名を処理できるはずです。

このランダムなエラーが表示される理由はわかりますか?

ご協力いただきありがとうございます。

4

1 に答える 1

4

CakePHP を開発した人たちからの答えを見つけました。実際、異なるプラグインに配置されていても、同じ名前の 2 つのコントローラーまたはモデルを使用することはできません。

これは 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 になります)。

于 2013-01-23T07:58:46.673 に答える