模块A 模块B
在模块B里调用模块A中model的方法做成dropDownList
访如何实现呢?
注:模块A和模块B是不同的数据库
模块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 ;
}
}
上面是示意性代码 要改动方可使用
太高深了,不理解