実装の詳細によって異なります。一般に、プラグインは実際にはプラグインとして表示されます。そのため、利用可能な場合、アプリケーションはそれを使用できます。たとえば、コンセプトコード:
if(pluginAvailable('PagesPlugin')) {
$this->set('menu', $this->PagesPluginComponent->getMenuItems());
}
アプリケーションはそれに依存できますが、ここにないこともできます。それがプラグインの一般的な概念です。現実の世界では、メニューなしで Web ページを表示することができず、実際の依存関係が作成されるため、はるかに困難です。
プラグインは再利用可能であるべきです。
いくつかのオプション:
完全にプラグインベースのページ構造
テーブルページ自体を持つプラグインを作成します。プラグインには、メニュー項目をロードするコンポーネントと、それらの表示をサポートするヘルパーがあります。
したがって、appcontroller でコンポーネントをロードし、ここで依存関係を設定します。before_filer では、メニュー データをロードしてビューに送信します。
default.ctp (または他のレイアウト ファイル) で、データを使用してプラグイン ヘルパーを呼び出します。
requestAction を実行する
プラグイン コントローラーでメソッドを作成し、requestAction を呼び出します: http://book.cakephp.org/2.0/en/controllers.html#Controller::requestAction
yourplugin/menus/index を呼び出すと、完全な MVC プロセスが返されます。したがって、プラグインのコントローラーはモデルからメニュー項目を取得し、データをそのビューに送信し、index.ctp でメニューをレンダリングします。アプリケーションに完全に完成した HTML 結果が返されます。
ヘルパーだけでプラグインを作成する
モデルにデータが必要な場合、プラグインはあまり役に立ちませんが、それでも: 適切なスタイルのメニューを生成する複雑な関数がある場合は、それをプラグイン ヘルパーに入れることができます。
アプリケーションでは、アプリケーションで自分でロードを行うため、すべての柔軟性があります。ビューに送信しますが、プラグインを使用してメニューをレンダリングします。そうすれば、問題なくメニューヘルパーを再利用できます。
appController にプラグイン appController を拡張させる
好きではありませんが、可能です: プラグインで、メニューの設定やその他すべてを処理する新しい AppController を作成できます。アプリケーション appController は、通常の AppController が Controller を拡張する代わりに、そのバージョンを拡張できます。したがって、次のようになります。 AppController は yourPluginAppController を拡張します。呼び出しと依存関係が表示されなくなり、実際には自動的に追加および実行されるため、このパターンは一般的に好きではありません。
オプション: より柔軟な作業方法のために、CakePHP は新しいイベントhttp://book.cakephp.org/2.0/en/core-libraries/events.htmlを追加しました。これは非常に興味深いものです。たとえば appcontroller に興味深いイベントを配置し、そのプラグインにリスナーをアタッチできます。これにより、これらのメソッドをハードコードで呼び出す必要がなくなります。それでうまくいくかもしれませんが、それはかなり新しく、真新しいためいくつかの不具合があります. ドキュメントはまだ完成しておらず、証明された使用法はあまりリリースされていません。