2017-10-08 134 views
0

我試圖在同一臺服務器上運行相同的代碼庫,但環境設置不同,我試圖實現的操作非常簡單: 如果用戶轉到:https://server/app:This加載生產環境 如果用戶轉到:https://server/app-test:此加載開發環境,我將需要加載不同的唯一東西是數據庫連接。Yii2:在相同的代碼基礎上設置多個環境

是否有任何可能的方式做到這一點?

感謝

+0

你有兩個分離的應用程序目錄?一個在/服務器/應用程序和一個在/服務器/應用程序測試? – scaisEdge

+0

@scaisEdge不,我想使用相同的代碼庫(相同的文件夾)但不同的條目腳本,條目腳本只會加載不同的數據庫連接。 – TechMafioso

+1

http://www.yiiframework.com/doc-2.0/guide-concept-configurations.html或https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/structure-environments .MD。你有幾個選項 - 1.定義環境相關變量'YII_ENV',2.加載配置特定文件。 – lubosdz

回答

-1

看來你有兩個不同的目錄,如果是這樣的話,使用上都應用了兩種不同的連接。

或者

我認爲你正在努力實現以下幾點:

一個應用程序,不同的數據庫連接。如果這是正確的,繼續執行以下步驟:

  1. 創建數據庫連接,說db.php中在你的config目錄

    <?php 
    return [ 
        'class' => 'yii\db\Connection', 
        'dsn' => 'mysql:host=localhost;dbname=dbname', 
        'username' => 'user', 
        'password' => 'password', 
        'charset' => 'utf8', 
    ]; 
    ?> 
    
  2. 調用文件db2.php在web.php文件,在組件部分:不管你想要去使用這個數據庫連接

    'db2' => require(__DIR__ . '/db2.php'), 
    
  3. ,覆蓋與DB2連接的默認數據庫連接:

    class X extends ActiveRecord { 
    
    public static function getDb() { 
        return Yii::$app->get('db2'); // second database 
    } 
    
    public $ids; 
    /** 
    * @inheritdoc 
    */ 
    public static function tableName() { 
        return 'dbName'; 
    } 
    
    /** 
    * @inheritdoc 
    */ 
    public function rules() { 
        return [ 
         // Rules as per your Database 
        ]; 
    } 
    
    /** 
    * @inheritdoc 
    */ 
    public function attributeLabels() { 
        return [ 
         'id' => 'ID', 
        ]; 
    } 
    } 
    

請注意,我用的X模型此連接。

+0

OP想要使用一個具有2個不同連接的目錄應用程序,而不依賴於'ActiveRecord'類中的重載函數。 – Yupik