Cake 2.0のキャッシュ、プラグイン、および重複するモデル名に関する問題が発生しています。私のアプリケーションには、公開用のアクション(ビュー、インデックス、等価物)のみを含むコントローラがいくつかあります。データはプラグインとして追加されたCMSによって管理され、プラグインのコントローラのいくつかの名前は同じです。名前を重複してキャッシュするプラグインと通常のコントローラー
たとえば、私のアプリケーションにはPostsControllerがあり、プラグインにはPostsControllerがあります。プラグインコントローラはPluginAppController
に拡張され、パブリックコントローラはAppController
まで拡張されています。キャッシングが開始されると(debug
を0
に設定すると)、問題が発生します。 Cakeはコントローラ内の存在しないadd
アクションにアクセスしようとします。コントローラはAppController
に拡張され、公開アプリケーションはPluginAppController
からメソッドにアクセスしようとします。
私はCakeがこれを行う理由を理解しておらず、正しく記録されていないすべての種類のエラー(空白ページ、失われたセッション)も作成します。アプリはまだCake 1.3と2.0の生産モードで動作していたが、すべてうまくいっていた。
/tmp/cache/persistent/
ディレクトリのファイルcake_core_file_map
が問題の原因であるようです。これを削除してビューのいずれかをリロードすると、レンダリングが正しく行われます。したがって、手順は次のとおりです。
- ロード
http://www.example.com/admin/posts
; - ロード
http://www.example.com/posts
(レンダリングに失敗しました)。 - キャッシュをクリアします(またはcake_core_file_mapだけ)。
- ロード
http://www.example.com/posts
; - ロード
http://www.example.com/admin/posts
(これは正しくロードされません)。
私の推測では、ケーキがcake_core_file_map
にプラグインし、メインアプリケーションのパスへの正しい参照を保存するために失敗しているが、私はその点でうまく動作するようにケーキを強制する方法を見当もつかない。
Cakeがプラグインのコントローラを重複した名前のコントローラと混同しないようにする方法を誰かが知っていますか?
EDIT
this reportは同様に同様の問題とcake_core_file_map
を挙げてこの問題は、ケーキのバグに関連している可能性があります。上記hereの修正プログラムは残念ながら動作しません。
編集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'));
これはまさにCakePHPのバグではありませんが、PHP 5.2の不適切な使い方です。 CakePHP 3で利用できる唯一の理由は、名前空間をサポートするPHP 5.3が必要なためです。 –