模块依赖和关系

时间:2013-01-23 16:14:05

标签: php yii architecture module

  

“一些常用的功能,如用户管理,评论管理,可以根据模块开发,以便在未来的项目中轻松重用。” - 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 个答案:

答案 0 :(得分:1)

yii-user module,它们的作用是,它们允许您在模块配置上为User模型指定其他关系:

/**
 * @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"),
            ),
            ...
        ),
  ),