Laravel-包含你自己的帮助函数

你可能想创建一个在应用的任何地方都可以访问的函数,这个教程将帮你实现 👏


很多教程都会说,你在 composer.json 这个文件中通过添加一个自动加载的文件,就可以实现这个需求。但我认为这不是一个好的方式,当你在 helpers.php 文件中添加了更多的函数时,可读性将变得很差。

下面我将介绍一种方式,让你可以定义很多文件,来包含不同的函数。这将让我们的程序更加整洁和更具可读性。

我们开始吧.. 🔥

首先创建一个 HelperServiceProvider.php 服务提供者文件:

php artisan make:provider HelperServiceProvider

使用上面命令,你将在 app\Providers 文件中生成 HelperServiceProvider.php

你可以简单的移除 boot() 方法,我们在这儿不会使用它。

register() 方法中我们添加以下代码:

public function register()
{
    foreach (glob(app_path('Helpers') . '/*.php') as $file) {
        require_once $file;
    }
}

这个循环将会遍历 app/Helpers 目录下的所有文件,你可能已经猜到了,现在你可以在这个目录下随便创建文件,它们将会被加载到你的应用程序中,这些帮助函数在你的代码的任何地方都可以被访问(views, models, controllers…)

我们还需要加载这个服务提供者,打开 config/app.php,然后将 HelperServiceProvider 放在你的 AppServiceProvider 上面

...
App\Providers\HelperServiceProvider::class,
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
App\Providers\BroadcastServiceProvider::class,
...

现在让我们创建一个简单的函数,在 app/Helpers 目录中创建一个 Carbon.php 文件,文件中包含以下代码:

<?php

/**
 * Carbon helper
 *
 * @param $time
 * @param $tz
 *
 * @return Carbon\Carbon
 */
function carbon($time = null, $tz = null)
{
    return new \Carbon\Carbon($time, $tz);
}

你不需要添加任何命令空间。如果你想,你可以使用 function_exists 检测这个函数是否存在。

现在,你可以在应用程序的任何你喜欢的位置使用帮助函数 carbon()。现在,如果您需要另一个返回特定格式的函数(仅针对本教程的用例),则可以在同一文件(Carbon.php)中输入该函数:

<?php

/**
 * Carbon helper
 *
 * @param $time
 * @param $tz
 *
 * @return Carbon\Carbon
 */
function carbon($time = null, $tz = null)
{
    return new \Carbon\Carbon($time, $tz);
}
function carbonFormatted($time = null, $tz = null)
{
    return carbon($time, $tz)->format('Y-m-d')
}

好的! 现在,您可以开始使用自己的PHP文件填充 app / Helpers目录,其中包含您经常使用的帮助程序 💪

注意:请记住,我是荷兰人,英语不是我的母语,因此本文可能包含一些语法错误。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://medium.com/@dennissmink/laravel-...

译文地址:https://learnku.com/laravel/t/35930

本帖已被设为精华帖!
本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 10

这样呢,,,

<?php

namespace App\Helpers;

class Carbon
{
    public static function ins($time = null, $tz = null)
    {
        return new \Carbon\Carbon($time, $tz);
    }

    public static function formatted($time = null, $tz = null)
    {
        return static::ins($time, $tz)->format('Y-m-d');
    }
}
4年前 评论
lovecn 4年前
largezhou (作者) 4年前

file

composer dump-autoload

4年前 评论
Hong_3 3年前
PhoenixIcy (作者) 3年前
Hong_3 3年前

@PhoenixIcy @奕鹏 文章开头说的很明白了!

很多教程都会说,你在 composer.json 这个文件中通过添加一个自动加载的文件,就可以实现这个需求。但我认为这不是一个好的方式,当你在 helpers.php 文件中添加了更多的函数时,可读性将变得很差。

4年前 评论
奕鹏 4年前

各有各的说法,咱们就择其善者而从之,则其不善而改之。

4年前 评论

我习惯在 bootstrap/app.php 文件引入 helpers.php

4年前 评论
游离不2

方法有很多种,composer.json 的最不建议,在 composer dump-autoload 的过程中会引入失败,导致找不到方法,虽然只是瞬间,如果流量大了,也会产生不少的错误。

4年前 评论
justmd5 4年前
游离不2 (作者) 4年前
justmd5 4年前

这个不错,我自己写的 MVC 也是归类,mail,time,json 各种

4年前 评论
翟宇鑫

:+1:棒,一直想找一种代替「bootstraprequire」或者「comopser autoload」的方式

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!