2016-10-16 51 views
0

laravelにコントローラオブジェクトの状態を保持する可能性はありますか?私が見つけたすべての例ではLaravelコントローラメンバ変数

、コントローラは次のようになります:

class MyController extends Controller { 
     public function getView(){ //return the view } 
     public function postData() { //save the data } 
} 

私はどうなるのか、私のデータベースから特定のデータをロードするサービスを呼び出し、ビューにそれを返すことです。上記の例では、これはgetView()関数内で行う必要があります。私のpostData()関数で同じデータが必要な場合はどうすればいいですか?そして、私はpostData関数で別のデータベース呼び出しを行う必要があります。 'MyController'にメンバー変数を持ち、laravelのルーティングのためにクラスのデータを一度しかロードすることはできません。ルーティングを介してgetView関数を呼び出すと、postDataを呼び出すと、取得するよりもMyControllerの別のインスタンスが取得されます。特定の関数をコントローラ全体に対して一度呼び出すだけで、コントローラ内のすべての関数からこの値にアクセスすることは可能ですか?

+0

あなたは単に 'getViewメソッド()'を直接 'POSTDATA()'で呼び出し、それを返すことができませんか? – radmen

+0

次にキャッシュを使用します。 – itachi

+0

'postData()'が何をしているかによって、私はキャッシュの使用に非常に注意します。フォーム提出時にデータベースから最新のデータを入手できるようにすることができます( 'post'接頭辞がそれを意味すると仮定します)。注意してください。 – JofryHS

答えて

0

全体のコントローラのために一度だけ、特定の関数を呼び出すと、コントローラ内のすべての 機能からこの値へのアクセスを取得する可能性はありますか?

私の理解によれば、それはできません。実際には、コントローラの任意の機能が経路経由で呼び出されています。コントローラの新しいオブジェクトが作成されるたびに、任意のルートが呼び出されたとき。しかし、それはラウンドの他の方法があります。キャッシュを使用できます。

  • コントローラの特定の機能を呼び出すことができます。
  • データベースからデータを取得します。
  • 他の機能のためにキャッシュに格納します。
  • 他の機能では、キャッシュで利用できるデータがありますか?キャッシュから取得し、データベース関数を呼び出してデータを取得します。単純に以下のようにコーディングで

Use Cache; 
class MyController extends Controller { 
     public function getView(){ 
     $data = call_to_database_and_returned_data(); 
     Cache::put('data',$data,120); 
     return the view 
     } 

     public function postData() { 
     $data = null; 
     if(Cache::has('data')) { 
      $data = Cache::get('data'); 
     } else { 
      $data = call_to_database_and_returned_data(); 
      Cache::put('data',$data,120); 
     } 
     } 
} 

構文の説明:

Cache::put('name_to_save_data',$your_variable_to_save,for_number_minutes); 
+0

Controllerオブジェクトの状態を保持する他の方法はありますか?私。ウィザードを作成するとき、各ウィザードステップはコントローラになります。しかし、この場合でも、セッションに入れる以外の値を保持することは可能です。セッションやキャッシュではない別のソリューションがありますか? – Steve

+0

解決策があるかもしれませんが、わかりません。私がこれを達成するためには、LARAVELの内部構造を変更する必要があります。なぜなら、LARAVELがそれぞれのコントローラの新しいインスタンスを作成しているためです。あなたの問題を解決するには、コントローラのSINGLETON INSTANCEを作成する必要があります。だから最初の最初にあなたはデータベースからクラスのプロパティに値を設定する関数を呼び出します。したがって、次にコントローラクラスの他の関数が呼び出されると、割り当てられたクラスプロパティにすでに値が設定されています。 –