2012-01-24 12 views
0

プロファイルと呼ばれるモデルのプラグインがあります。また、私は、関数/ getProfileDetailsを含むapp/modelフォルダにプロファイルモデルを持っています。この機能は、私は私がURLを介してプラグインにアクセスWhenver次のコードloadmodelプラグインモデル

function beforeRender(){if ($this->isAuthorized()) 
{ 
    $this->loadModel('Profile'); 
    $this->set('ownProfile', $this->Profile->getProfileDetails($this->Auth->user('id'))); 
} 

}

を使用して、のAppControllerから呼び出しています、Imは次のエラー 構文エラーまたはアクセス違反を取得取得:あなたが持っている1064あなたのSQL構文のエラー。正しい構文については、MySQLサーバのバージョンに対応するマニュアルを参照して、1行目の「getProfileDetails」の近くで使用してください。 /lib/Cake/Model/Datasource/DboSource.php(436):PDOStatement-> execute(Array) /lib /Cake/Model/Datasource/DboSource.php(403):DboSource - > _ execute( 'getProfileDetai ...'、Array)

私がPlugin/model/profileで同じ機能を使用すると、すべてが機能しています。 loadmodelでapp/model/profileモデルを取るようにケーキを教えるには?

答えて

2

Cake 2.0とそれ以前のバージョンでは、重複するモデル/コントローラ名がサポートされていません。そのような設定が1.3以下で動作していたという事実は、意図しない副作用が開発者には知られていなかったことです。 Cakeはプラグインと実際のアプリケーションからすべてのクラスをロードします。だから、あなたのアプリケーションのどこにでも重複しているクラス名は、物事を混乱させるように縛られています。

重複したクラス名のサポートはCake 3.0に追加される可能性があります。このバージョンはPHP 5.3に依存しており、重複したクラス名を作成するために必要な名前空間をサポートしています。

私が知っている唯一の回避策は、プラグインの名前をファイルやクラス名の前に付けて、プラグインのコントローラ、モデル、ビューの名前を変更することです。プラグインがアプリケーションと同じデータベーステーブルを使用する場合は、$useTableモデル属性を使用して、名前を変更したモデルを正しいデータベーステーブルにポイントする必要があります。

背景の一部はthis bug reportで覆われています。

+0

ちょっと待って、私はちょうど私がおおよそ同じ答えで前にあなたの質問に答えたことに気付いた(http://stackoverflow.com/questions/8879597/cakephp-plugin-model-controller-cache-issue-with -main-model-controller)を使用します。私はこのシナリオにも同じことが当てはまります:重複したクラス名はCakeで問題を引き起こします。 – mensch

+0

はい。返信いただきありがとうございます。 – binoy

関連する問題