2016-05-10 2 views
0

私は2つのモデルがあります:はLaravelはグローバル関数

ビル: ID、bill_id、

たびに誰かをmonto: ID、ACCOUNT_ID、descripcion、monto_pagadoは、お支払いは

saldo新しい請求書をアカウントに挿入するか、新しい支払いを挿入する。アカウントの残高を計算するふりをする。私は私がしなければなら知っているコントローラ

内の関数としてモデル

  • でミューテーターなどのサービス
  • として

    • :何これを実現するのに最適な場所でしょう

      私のプロジェクトの他の場所でこれを呼んでください。ですから私はそれをグローバルな機能にしたいと思います。それをするのに最適な場所は何でしょうか?

  • +0

    クラスを作成し、必要なクラスに注入してから、$ this-> billing($ somthing);を使用します。これは私が知る限り最良の簡単な方法です –

    答えて

    0

    モデルでイベントを使用できます。モデルが実際にデータベースに作成される前に計算する場合はcreating、作成後に計算する場合はcreatedを使用します。あなたのApp \プロバイダ\ AppServiceProvider ::ブート()メソッドで

    、両方のモデルのためのイベントを定義します。

    class AppServiceProvider extends ServiceProvider 
    { 
        public function boot() 
        { 
         Bill::creating(function ($bill) { 
          // Do something with $bill 
         }); 
        } 
    
        // etc 
    } 
    

    をコードの繰り返しを回避するには、形質を使用して、両方のクラスでそれを使用することができます。例えばPretendCalculationTraitそれを呼び出し、(必要に応じてディレクトリを作成)app/Traitsに置き:

    <?php 
    
    namespace App\Traits; 
    
    trait PretendCalculationTrait 
    { 
        public function pretendCalculate() 
        { 
         // Do your stuff 
        } 
    } 
    

    次に、あなたのモデルでは、この特性を使用します。

    class Bill extends Eloquent 
    { 
        use App\Traits\PretendCalculationTrait; 
    
        // etc. 
    } 
    

    最後に、あなたのAppServiceProviderで、メソッドを呼び出します特性で定義される:

    public function boot() 
    { 
        Bill::creating(function ($bill) { 
         return $bill->pretendCalculate(); 
        }); 
    
        Payment::creating(function ($payment) { 
         return $payment->pretendCalculate(); 
        }); 
    } 
    

    詳細については、Laravel Model Eventsのドキュメントを参照してください。

    0

    可能な解決策の1つは、グローバル関数にしたいと述べたので、Laravelのオートローディング機能を使用することです。

    計算用の関数を含むファイルを作成します。それはどこにでも置くことができ、他の機能を含めることができますが、簡潔にするためにここに置きます:App/Http/customFunctions.php。あなたのファイルで、あなたの関数を作成します。

    function pretendCalculation() 
    { 
        return $something; 
    } 
    

    次に、composer.jsonであなたのオートローディングリストに追加することによって、自動読み込みにそれをLaravelを伝える:

    "autoload": { 
        "classmap": [ 
         "database" 
        ], 
        "psr-4": { 
         "App\\": "app/" 
        }, 
        "files": [ 
         "app/Http/customFunctions.php" <-- Here is the new file 
        ] 
    

    をそれからちょうど今composer dump auto-load -oなどを実行し、アプリケーション内のどこにでも、このファイル/ファイル内のすべての機能にアクセスできます。

    関連する問題