如何在命名空间 App\Controller 中声明一个新函数?

How to declare a new function in namespace App\Controller?

我编写了将生日日期转换为年龄的代码行。

我将在许多控制器和许多路由函数中使用此代码! 所以我决定将它放在一个函数中并调用 calculate_age().

我的问题是如何在 namespace App\Controller; 中声明该函数或任何函数 once?所以我可以在所有控制器中使用它。

函数代码:

public function calculate_age($birthday): ?int
{
    $current_date = date('d-m-Y', time());
    $info         = explode(' ', $birthday);
    $months       = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
    $numbers      = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'];
    $i            = 0;
    for ($i = 0; $i <= 11; ++$i) {
        if ($info[2] == $months[$i]) {
            $info[2] = $numbers[$i];
        }
    }
    $all = $info[1].'-'.$info[2].'-'.$info[3];

    $difference = date_diff(date_create($current_date), date_create($all));
    $age        = \intval($difference->format('%y'));

    return $age;
}

理想情况下,因为它是一个计算年龄的函数,你会有一个 Person 模型并将这个函数放在那里,然后你会在你的 people 控制器上调用它,它会是这样的(这是一个通用代码,好吗?):

$age = $this->Person->calculate_age($birthday);

另一种选择(但我不推荐)是在主模型中包含此函数,因此可以从继承它的所有 class 模型访问它。

或者(但也不推荐用于这种情况),你可以有一个通用的静态服务 class 这样你就可以放置更通用且不属于特定模型的函数,某种的助手那么你可以这样做:

$age = YourHelperClass::calculate_age($birthday);

如果你不知道模型是如何工作的,我建议你搜索 MVC,但基本上,一个模型将包含与你的应用程序逻辑相关的所有方法,而控制器应该只控制逻辑流. 模型要厚,控制器要薄。