2017-03-09 9 views
0

IMHOで些細なことがあるはずです。CakePHP 3のプラグインAppControllerでAppControllerの公開関数を参照する方法

私は自分のWebアプリケーションAppControllerの公共機能を持っている - 私はプラグインを持っていると私はシステム全体のAppControllerで定義されたgetDbConfig()関数を参照したいgetDbConfig()

それを呼び出します。 $これはローカルコンテキストを参照するので - -

明らか$this->getDbConfig()は動作しませんが、私の人生のために私はプラグインAppControllers

答えて

1

doesnの」内にシステムAppControllerにパブリック関数へのパスを指定する方法を見つけ出すことはできませんIMHOを意味する。プラグインはあなたのアプリケーションの外で生きるように作られています。理想的には、プラグインを公開して他の開発者がアプリケーション内で使用できるようにすることができます。

あなたが(あなただけの)あなたのAppControllで持っている関数を参照する場合、あなたのプラグインはもはやプラグインではありません。

これは、コンポーネントを作成する典型的なケースだと思います。あなたは両方のプラグインとのAppController

1

からそのコンポーネントを呼び出すことができますが、私の人生のために私はプラグインでは、システムのAppControllerにパブリック関数へのパスを指定する方法を見つけ出すことができないようにコンポーネント内getDbConfig()を入れてAppController

php OOP namespace basicsについて読んでください。クラスをインポートしてエイリアスする必要があります。そしてあなたのアプリのAppControllerから継承します。これにより、プラグインはAppのネームスペースを利用できることに依存しますが、少なくとも私は別のネームスペースを使用するCakePHPアプリケーションを見たことがありません。それが別のものであれば、開発者はそのフォークをフォークして使用し、そのフォークに変更を加えることができます。

また、問題のコードをコンポーネントまたはユーティリティクラスにして、そのクラスが存在する場合はプラグインAppControllerをチェックインし、ユーティリティlibをインスタンス化するか、コンポーネントをロードします。

0

設定パラメータとして、またはgetDbConfig()の結果(多くは変更されないものと仮定します)にプラグイン/コンポーネントに関数を渡す必要があります。

ので:あなたのコントローラで

その後

class MyComponent extends Component 
{ 
    private $dbconfig = null; 

    public function initialize (array $config) 
    { 
    parent::initialize ($config); 
    if (isset ($config['dbconfig'])) 
    { 
     $this->dbconfig = $config['dbconfig']; 
    } 
    } 

}、:

class MyController extends AppController 
{ 
    public function initialize() 
    { 
     parent::initialize(); 
     $this->loadComponent ('My', ['dbconfig' => $this->getDbConfig()]); 
    } 
} 

あなたが本当に関数を参照し、それを呼び出す必要がある場合は、variable functionsを使用しています。

関連する問題