來自此評論:
My problem is not with the creation of the component. Soon after creating if I access Yii::app()->db2 its works, but when I try to access via another model or controller I get the error
我想你只是在某個地方設置這個組件,然後向不同的控制器發出後續請求。
您需要將代碼放在每個請求的某個地方,稱爲EVERYTIME。多數民衆贊成PHP如何工作,沒有「全球應用程序狀態」
默認情況下Yii自帶protected/components/controller.php
有應用程序的其餘部分的基礎控制器。
我的建議是把你的代碼放在那個控制器的init()
方法上,這樣它總是調用。
您提到的數據庫名字來自一個表,一旦用戶登錄,所以你需要保存在會話中值,也能夠訪問它的其他要求:
<?php
// After login in
Yii::app()->user->setState('db_name', $db_name);
// in protected/components/controller.php
public function init()
{
if (!Yii::app()->user->isGuest) {
$db2 = Yii::createComponent(array(
'class' => 'EMongoClient',
'server' => 'mongodb://127.0.0.1:27017',
'db' => Yii::app()->user->getState('db_name')
));
Yii::app()->setComponent('db2',$db2);
}
}
希望它能幫助,我在這裏假設很多東西:)
當我嘗試這樣做,我得到以下錯誤:'缺少論據2 CModule :: setComponent ()' –
我的問題不在於創建組件。創建後不久,如果我訪問'Yii :: app() - > db2'其作品,但是當我嘗試通過另一個模型或控制器訪問時,我得到錯誤 –
好吧,嘗試Yii :: app() - > setComponents(array ( 'DB2'=> $ DB2)); (帶「s」)。或者試試Yii :: app() - > setComponent('db2',<配置數組>) – CreatoR