在 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.
在数据库中我有每个员工的薪水。
我需要计算出从工资中扣除多少税,但我认为将其硬编码到每个视图中是不正确的,比如...
{{($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.