【问题标题】:What is the correct way to perform a formula in Laravel 6 without repeating the formula each time?在 Laravel 6 中执行公式而不每次都重复公式的正确方法是什么?
【发布时间】:2020-06-07 06:03:32
【问题描述】:

在数据库中,我有每个员工的工资。

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

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

这明显是乱七八糟的重复。

我认为我需要做的是创建一个函数,我可以在其中简单地提供 Bob 的薪水,计算税金并返回值。

类似...

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)}}

这样的事情可能吗?我会将函数放在哪里,在控制器或模型中?显然代码不起作用,只是为了显示我想要实现的目标,只是想知道我将如何实现它,这可能吗?谢谢。

【问题讨论】:

  • 这主要是基于意见的。这样的事情可能吗?是的当然。您应该先尝试一下,然后再在 stackoverflow 中询问

标签: laravel model-view-controller model controller laravel-6


【解决方案1】:

您可以创建一个自定义 Helper 类并在您的 Controller 中使用它来执行相同的操作:

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

<?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,
     ...

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

第 4 步:在你的 Laravel 应用中的任何地方使用这个类:

<?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);}}

【讨论】:

    【解决方案2】:

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

    您还可以使用访问器从现有属性返回新的计算值:

    /**
     * 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}}
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 2022-12-31
      相关资源
      最近更新 更多