2017-10-08 11 views
0

私は同じサーバー上で同じ環境でコードベースを実行しようとしていますが、達成しようとしているものは非常に簡単です: ユーザが:https://server/app:これプロダクション環境をロードします ユーザが:https://server/app-test:これは開発環境をロードしますが、ロードする必要があるのはデータベース接続のみです。Yii2:同じコードベースの複数の環境設定

可能な方法はありますか?

おかげ

+0

あなたは2つの別々のアプリディレクトリを持っていますか? 1つは/ server/appに、もう1つは/ server/app-testにありますか? – 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

そうである場合は、両方のアプリケーションに2つの異なる接続を使用して、二つの異なるディレクトリを持っているようです。

それとも

私はあなたが以下を達成しようとしていると思う:

一つのアプリケーションと異なるデータベース接続を。これが正しければ、次のステップに進みます。

  1. はあなたのweb.phpでファイルdb2.phpを呼び出し

    <?php 
    return [ 
        'class' => 'yii\db\Connection', 
        'dsn' => 'mysql:host=localhost;dbname=dbname', 
        'username' => 'user', 
        'password' => 'password', 
        'charset' => 'utf8', 
    ]; 
    ?> 
    
  2. あなたのconfigディレクトリにをdb.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つの異なる接続を持つ1つのディレクトリアプリケーションを使用する必要があります。これは 'ActiveRecord'クラスの関数のオーバーライドに依存しません。 – Yupik

関連する問題