我创建了一个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ó"
>>>
我留下这个问题是为了对别人有所帮助。
答案 0 :(得分:1)
创建帮助程序文件后,您需要将其路径添加到composer.json
下files
部分的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;
}
}