2013-01-23 85 views
0

「一些常用的功能,如用戶管理,評論管理,可能會根據模塊進行開發,以便它們可以在未來的項目中輕鬆重複使用。」 - http://www.yiiframework.com/doc/guide/1.1/en/basics.module模塊依賴關係和關係

我有很多需要用戶的項目。每次都有相同的數據庫結構和功能。註冊,登錄,註銷等。 Yii告訴我,我可以重用模塊。酷...讓我們開始吧:

我有3個部分:用戶,市場活動和網站。

在該項目中的CampaignModule具有與UserModule的關係(campaign_user [USER_ID,CAMPAIGN_ID])

的WebsiteModule具有相對於所述CampaignModule和所述UserModule。

我想重用與像註冊功能,在其他項目中UserModule,登錄,編輯等

實際情況: 與GII創建模型每個人都有跨模塊關係和依賴關係之後。 例如

UserModule: 'campaigns' => array(self::HAS_MANY, 'Campaign', 'user_id'), 

要使用WebsiteModule,需要包含User-和CampaignModule。 現在我甚至必須包含Website-和CampaignModule才能使用UserModule!

我也想更新許多項目的UserModule,也許建立一個基本模塊的框架。

什麼是正確的方式來規劃這樣的架構?

回答

1

有一個yii-user module,他們做什麼,是他們讓你來指定用戶模型的其他關係,對模塊配置:

/** 
* @return array relational rules. 
*/ 
public function relations() 
{ 
    $relations = Yii::app()->getModule('user')->relations; 
    if (!isset($relations['profile'])) 
     $relations['profile'] = array(self::HAS_ONE, 'Profile', 'user_id'); 
    return $relations; 
} 

所以,你可以這樣做:

'modules'=>array(
    'user' => array(
      ... 
      'relations' => array(
       'categories' => array(CActiveRecord::HAS_MANY, 'Category', "user_id"), 
       'account' => array(CActiveRecord::HAS_ONE, 'Account', "user_id"), 
      ), 
      ... 
     ), 
), 
+1

這是一個很好的關係解決方案。但我仍然有一個問題找到模塊的全球解決方案。如果WebsiteModule具有WebsiteRatingModel,我不想在我的應用程序或其他模塊中使用WebsiteRating :: model() - > ...。我想通過一個接口或一種API與模型進行通信。編寫Yii :: app() - > getModule('website') - > website-> getWebsiteRating(123)不是最好的主意......( - >網站是在模塊init()中設置的組件集合) –