我有2種型號:Laravel全局函數
比爾: ID,ACCOUNT_ID,descripcion,monto_pagado,saldo
付款方式: ID,bill_id,蒙託
每次有人爲帳戶插入新帳單或插入我假裝計算帳戶餘額的新付款。
什麼是完成這一任務的最好的地方:
- 作爲服務
- 作爲控制器模型
- 的功能變異符
我知道我將不得不在我的項目的其他地方打電話給我。所以我希望它成爲一個全球性的功能。什麼是最好的地方呢?
我有2種型號:Laravel全局函數
比爾: ID,ACCOUNT_ID,descripcion,monto_pagado,saldo
付款方式: ID,bill_id,蒙託
每次有人爲帳戶插入新帳單或插入我假裝計算帳戶餘額的新付款。
什麼是完成這一任務的最好的地方:
我知道我將不得不在我的項目的其他地方打電話給我。所以我希望它成爲一個全球性的功能。什麼是最好的地方呢?
您可以在模型中使用事件。如果要在數據庫中實際創建模型之前計算,則使用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文檔以瞭解更多詳細信息。
一個可能的解決方案,因爲您提到希望它是一個全局函數,所以使用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
或類似的,而現在您可以在應用程序的任何位置訪問該文件/文件中的所有功能。
創建一個類,注入任何你需要的類,然後使用$ this-> billing($ somthing);據我所知,這是最簡單的方法 –