Как правильно выполнить формулу в Laravel 6 без повторения формулы каждый раз? - PullRequest
0 голосов
/ 23 февраля 2020

В базе данных у меня есть зарплата для каждого из моих сотрудников.

Мне нужно выяснить, сколько налогов вычесть из зарплаты, но я не думаю, что было бы правильно жестко закодировать это в каждый вид, что-то вроде ...

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

Это явно грязно и повторяется.

Что я думаю, мне нужно сделать, это создать функцию, где я могу просто кормить зарплату Боба, она рассчитывает налог и возвращает значение.

Что-то вроде ...

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

Возможно ли что-то подобное? Где бы я поместил функцию, в контроллере или модели? Очевидно, что код не сработает, а просто покажет, чего я хочу достичь, просто подумав, как бы я этого достиг, возможно ли это? спасибо.

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

Вы можете создать собственный класс Helper и использовать его в своем контроллере для выполнения того же:

Шаг 1: Создайте свой файл помощников (или другого пользовательского класса) и передайте ему соответствующее пространство имен. Напишите ваш класс и метод:

<?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 в проекте root

Шаг 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);}}
0 голосов
/ 23 февраля 2020

В вашей модели пользователя вы можете установить аксессор.

Вы также можете использовать методы доступа для возврата новых вычисленных значений из существующих атрибутов:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...