2012-09-12 26 views
2

這是一個設計模式問題。如何在插件中擴展控制器 - CakePHP

我正在使用CakePHP 2.1,並且正在編寫一個插件(FooPlugin)。
我想讓插件包含控制器(和模型),它們是應用程序中控制器的擴展。例如:我在app/Controller中有一個UsersController,它在FooPlugin中作爲FooUsersController進行擴展,並帶有一些Foo特定的操作。 (我基本上構建多個應用程序中的插件的形式都依賴於一箇中央用戶管理應用程序)

常見的做法(我相信),以在插件中的所有控制器擴展FooAppController。但我想繞過FooAppController並讓FooUsersController直接擴展UsersController。
這打破了使用插件全beforeFilter等等

我的問題的可能性:

  • 這是否突破不僅僅是插件全beforeFilter/beforeRender更多?
  • 我是否忽略了從FooAppController和UsersController繼承功能的常見模式?或者我應該處理一個或另一個選擇?
  • 是我提出的一個很大的禁忌?或者只要我意識到我遵循的模式就完全沒問題?

親切的問候, 巴特

回答

0

您可以擴展應用程序控制器wihtout任何問題,確實沒有pluginwide回調了,你可以將組件添加到插件控制器來處理也許插件寬回調的解決方案爲此,仍然保持你的插件控制器DRY

0

您可以簡單地使用App::uses('MyController', 'MyPluginName.Controller');

按照文檔從2.0:http://book.cakephp.org/2.0/en/core-utility-libraries/app.html#loading-files-from-plugins

它說以下內容:在插件

加載類的工作原理大致相同,加載的應用程序和核心類,除非你必須指定要加載插件:

// Load the class Comment in app/Plugin/PluginName/Model/Comment.php 
App::uses('Comment', 'PluginName.Model'); 

// Load the class CommentComponent in 
// app/Plugin/PluginName/Controller/Component/CommentComponent.php 
App::uses('CommentComponent', 'PluginName.Controller/Component');