在 Laravel 6 中执行公式而不每次都重复公式的正确方法是什么?

What is the correct way to perform a formula in Laravel 6 without repeating the formula each time?

在数据库中我有每个员工的薪水。

我需要计算出从工资中扣除多少税,但我认为将其硬编码到每个视图中是不正确的,比如...

{{($bob->salary - 12,000) * 0.2}}

明显乱七八糟,重复

我想我需要做的是创建一个函数,我可以简单地向 Bob 提供工资,它计算税金和 returns 价值。

类似...

public function taxPayable($salary){
  $taxThreshold = 12,000;
  $taxRate = 0.2;
  if($salary >= $taxThreshold){
    $taxPayable = ($salary - $taxThreshold) * $taxRate;
  } else {
    $taxPayable = 0;
  }
  return $taxPayable;
}

那么简单..

{{Taxcalculator::taxPayable($bob->salary)}}

这样的事情可能吗?我应该把这个功能放在控制器或模型中的什么地方?显然代码不起作用,只是为了展示我想要实现的目标,只是想知道我将如何实现它,这可能吗?谢谢。

您可以创建一个自定义助手 class 并在您的控制器中使用它来执行相同的操作:

第 1 步: 创建您的助手(或其他自定义 class)文件并为其提供匹配的命名空间。写下你的 class 和方法:

<?php // Code within app\Helpers\Helper.php

namespace App\Helpers;

class Helper
{
    public static function taxPayable($salary)
    {
         // perform your calculation here
        return $taxPayable;
    }
}

步骤 2: 创建别名:

<?php // Code within config/app.php

    'aliases' => [
     ...
        'Helper' => App\Helpers\Helper::class,
     ...

第三步: 运行 composer dump-autoload 在项目根目录

第 4 步:在您的 Laravel 应用中的任何位置使用此 class:

<?php // Code within app/Http/Controllers/SomeController.php

namespace App\Http\Controllers;

use Helper;

class SomeController extends Controller
{

    public function __construct()
    {
        Helper::taxPayable($bob->salary);
    }

即使您也可以在您的视图中使用它,例如:

{{Helper::taxPayable($bob->salary);}}

在您的用户模型中,您可以设置访问器。

You may also use accessors to return new, computed values from existing attributes:

/**
 * Get the user's tax payable regarding salary amount.
 *
 * @return float
 */
public function getTaxPayableAttribute()
{
    $taxPayable = 0;
    $taxThreshold = 12000;
    $taxRate = 0.2;
    if ($this->salary >= $taxThreshold) {
        $taxPayable = ($this->salary - $taxThreshold) * $taxRate;
    }
    return $taxPayable;
}

然后你就可以将它用作新计算的属性:

{{($bob->taxPayable}}

或 blade 文件旁边的 PHP 代码中的任何位置。 Docs.