Laravel自定义字符串帮助文件

时间:2019-08-14 15:18:12

标签: php laravel laravel-5 laravel-helper

我创建了一个Artisan命令文件,该文件处理不同编码的字符串。

我需要实现一个mb_str_pad函数(并发现this one)。

我创建了一个帮助文件app/Library/Helpers/StringHelper.php

<?php

if (!function_exists('mb_str_pad')) {
    function mb_str_pad() {
        :
        :
    }
}

然后我将其添加到composer.json文件中:

"autoload": {
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "psr-4": {
        "App\\": "app/"
    },
    "files": [
        "app/Library/Helpers/StringHelper.php" // <-- Here
    ]
},

并运行composer dump-autoload

当我尝试运行命令(php artisan mytasks:generate)时,出现此错误:

Call to undefined function App\Console\Commands\mb_str_pad()

第二次尝试:
我还尝试通过以下方式添加服务:

php artisan make:provider StringHelperServiceProvider

register()函数中,我输入:

require_once app_path('Library/Helpers/StringHelper.php');

然后在app.php中添加到providers数组中:

App\Providers\StringHelperServiceProvider::class,

但是我遇到同样的错误。

==========================编辑=================== ===

我对此没有很好的解释,但是现在相同的代码可以正常工作。

我唯一要做的就是用Tinker测试我的功能:

$ php artisan tinker
Psy Shell v0.9.9 (PHP 7.2.4-1+ubuntu16.04.1+deb.sury.org+1 — cli) by Justin Hileman
>>> mb_str_pad("Hello", 10);
=> "Hello     "
>>> mb_str_pad("Hello", 10, ' ', STR_PAD_LEFT);
=> "     Hello"
>>> mb_str_pad("Helló", 10, ' ', STR_PAD_LEFT);
=> "     Helló"
>>> 

我留下这个问题是为了对别人有所帮助。

2 个答案:

答案 0 :(得分:1)

创建帮助程序文件后,您需要将其路径添加到composer.jsonfiles部分的autoload中。然后,您应该可以像使用其他任何框架帮助程序功能一样使用您的帮助程序功能。

"autoload": {
    "files": [
        "app/helper.php"
    ],
},

更新composer.json后,运行composer dumpautoload

在声明之前,请确保检查功能是否已经存在

if (!function_exists('mb_str_pad')) {
    // Your code
}

答案 1 :(得分:1)

除了在您的composer.json中定义帮助程序文件之外,您还可以在App\Providers\AppServiceProvider::register()方法中要求它:

$filenames = glob(app_path('Library/Helpers/*.php'));
if ($filenames !== false && is_iterable($filenames)) {
    foreach ($filenames as $filename) {
       require_once $filename;
    }
}