2016-05-10 157 views
0

我有2種型號:Laravel全局函數

比爾: ID,ACCOUNT_ID,descripcion,monto_pagado,saldo

付款方式: ID,bill_id,蒙託

每次有人爲帳戶插入新帳單或插入我假裝計算帳戶餘額的新付款。

什麼是完成這一任務的最好的地方:

  • 作爲服務
  • 作爲控制器模型
  • 的功能變異符

我知道我將不得不在我的項目的其他地方打電話給我。所以我希望它成爲一個全球性的功能。什麼是最好的地方呢?

+0

創建一個類,注入任何你需要的類,然後使用$ this-> billing($ somthing);據我所知,這是最簡單的方法 –

回答

0

您可以在模型中使用事件。如果要在數據庫中實際創建模型之前計算,則使用creating;如果要在創建模型後計算,則使用created

在您的應用程序\供應商\ 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

一個可能的解決方案,因爲您提到希望它是一個全局函數,所以使用Laravel的自動加載功能。

創建一個包含您的計算功能的文件。它可以放在任何地方,幷包含其他功能,但爲了簡潔起見,我們將它放在這裏:App/Http/customFunctions.php。在文件中,創建功能:

function pretendCalculation() 
{ 
    return $something; 
} 

接下來,告訴Laravel自動加載它在composer.json其添加到您的自動加載列表:

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

然後,只需執行一個composer dump auto-load -o或類似的,而現在您可以在應用程序的任何位置訪問該文件/文件中的所有功能。