模块之间的访问

模块A 模块B

在模块B里调用模块A中model的方法做成dropDownList

访如何实现呢?

注:模块A和模块B是不同的数据库

方法可能比较多

首先要解决 类名问题 用yii的 Yii::import(‘b.models.SomeModelClassName’); 这样应该可以导入另一个模块的类

但这会导致加载另一个模块的 所以最好用 Yii::import(‘applicaiton.modules.b.models.SomeModelClassName’);

先要避开不必要的模块初始化 这样的调用破坏封装性 你在model A中直接调用Model B

还有一种是根据 “门面设计模式 (facade design pattern) google/baidu 就可找到” 通过同一个的单点接口 暴露本模块的所有服务给外部对象 比如你是BModule 那么可以建立一个 BService 统一暴露自己的服务给其他module 这样隔离内部细节 接口也比较稳定

在BService中提供服务 比如





  class BService extends CComponent{

  

   public function getXxxOptions(){


        //这里 用你本模块的model 产生一个数组供另一个模块使用即可

        /*

          由于你使用了不同的数据库  那么 在方法进入前 可以先切换当前db  退出时再还原

         */

       $oldDb = Yii::app()->db ;


 Yii::app()->setComponents(array(

            'db'=>array(

            'class'=>'CDbConnection',

            //这里是另一个库的配置

            ), false);


       $returnArr = XXX::model()->findAll....  //自己构造一个下拉列表用的数组CHtml::listData(Xxx::model()->findAllByXX(),'key','val');


       Yii::app()->db = $oldDb ;


     return $returnArr ;

           

  }




}




:D 上面是示意性代码 要改动方可使用

太高深了,不理解