2016-08-07 16 views
1

私はLaravel 5.2を開発中です。開発中に利用できないデータベースに接続するアプリケーションです(ローカルにはインストールできない従来のデータベースです)。開発中にLaravelのインターフェイスを切り替える方法

アプリケーションをビルドして1つのインターフェイスを使用して開発し、プロジェクトを実際の環境にプッシュするときに別のインターフェイスに切り替えるには、Laravelで最もクリーンな方法は何ですか?

これまでは2つのクラスがあり、どちらも同じ関数を持っていましたが、設定ファイルではどちらのクラスを使うのかと言います。 Laravelを使うより良い方法があれば、たださまよいますか?それとも既に焼き尽くされている方法があれば?私はこれを達成すると考えることができ

+0

* switch interface *とは、他のデータベースまたは実際のインターフェイスに切り替えることを意味しますか?あなたは、最終結果が欲しいものの例を挙げることができますか? – TheFallen

+0

私はローカルで開発しているときに、私は開発を続けることができるようにハードコードされた値を返すスタブアウトクラスを持っています。例えば、 'getOrders'と呼ばれる関数は、ローカルで開発するときにハードコードされた配列を返しますが、ライブにデプロイするときに、スタブアウトされたクラスではなく、実際のデータベースを使用します。 – Lock

答えて

1

一つの方法は、あなたがローカル生産環境にしているとき、依存性注入のインスタンスを切り替えることです。

class ControllerExample 
{ 
    public function index(SomeInterface $data) 
    { 
     //... 
    } 
} 

したがって、この例では、コントローラ指数方法が自動的に注入されるSomeInterfaceを必要とします。 ローカルの開発では、このインターフェイスをスタブクラスに解決することができ、の生産の場合は、実際のクラスに切り替えることができます。あなたは)(レジスタに/プロバイダ/ AppServiceProvider.phpアプリで方法をインターフェースの結合を登録することでこれを行うことができます。

if ($this->app->environment() == 'local') { 
    $this->app->when('App\Your\ControllerExample') 
     ->needs('App\SomeInterface') 
     ->give('App\YourStubbedClass'); 
} else { 
    $this->app->when('App\Your\ControllerExample') 
     ->needs('App\SomeInterface') 
     ->give('App\YourRealClassWorkingWithTheRealDatabase'); 
} 

あなたのenvはローカルあるとき、これは基本的にされて何あなたのコントローラの依存関係はスタブクラスで解決されます。そうでない場合は、他のenvsでは実クラスになります。

+0

素晴らしい!私はこれを行って報告します。 – Lock

+1

まさに私が望んでいたもの。ありがとう! – Lock

関連する問題