2012-01-27 50 views
3

我需要在cakephp中準備三個單獨的模塊。一個是管理員,酒店管理員,客人。這三個將是不同類型的用戶具有相同的登錄屏幕,但內部佈局將完全分開。cakephp應用程序中的多個模塊

我們可以爲他們所有的三個單獨的文件夾結構像三個應用程序文件夾或我們需要使用這些用戶的路由(如here),這將導致混合控制器,這將難以操縱。

+2

使用路由。爲什麼這些混合控制器難以操縱?您只需擁有諸如admin_index(),hotel_admin_index()和guest_index()之類的操作列表。 – Joep 2012-01-27 06:24:22

回答

4

您可以將模塊創建爲「插件」,然後他們將擁有單獨的模型,視圖和控制器。插件的默認路由是可以通過/plugin_name/controller_name/action訪問它們。插件甚至可以擁有自己的佈局等。您的案例中的主要應用程序將被減少到驗證用戶和檢查權限。

更多信息:
1.3:http://book.cakephp.org/1.3/en/view/1111/Plugins
2.0:http://book.cakephp.org/2.0/en/plugins.html

我會用路由只有三個模塊具有基本相同的控制器和模型。

+0

感謝您的答覆。如果我想爲所有模塊/插件保留相同的模型 – phpian 2012-01-27 09:17:45

+0

然後,您需要在主應用程序中定義模型並從插件中使用它們。 – Joni 2012-01-27 10:24:50

1

將前綴路由與多個layouts結合應解決您的問題。正如Joep在評論中提到的那樣,控制器中的操作遵循一個簡單的命名方案admin_index(), hotel_admin_index() and guest_index(),這可以讓您輕鬆組織代碼。

您可以在您的AppController中使用以下代碼來處理佈局之間的切換(即default.ctp,admin.ctp和hotel_admin.ctp)。

function beforeRender() { 
    if (isset($this->params['prefix']) { 
    if ($this->params['prefix'] == 'admin') { 
     $this->layout = 'admin'; 
    } else if ($this->params['prefix'] == 'hotel_admin') 
     $this->layout = 'hotel_admin'; 
    } 
    } 
} 

你甚至可以把它更進一步,分離所有的靜態資源(即/img/admin/new-blah.png)

相關問題