Laravel 自定义字符串帮助文件
Posted
技术标签:
【中文标题】Laravel 自定义字符串帮助文件【英文标题】:Laravel custom strings helper file 【发布时间】:2019-12-21 04:23:18 【问题描述】:我创建了一个处理不同编码字符串的 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ó"
>>>
我留下这个问题,以防它对某人有所帮助。
【问题讨论】:
【参考方案1】:创建帮助文件后,您需要将其路径添加到files
部分autoload
下的composer.json
。然后您应该能够像使用任何其他框架辅助函数一样使用您的辅助函数。
"autoload":
"files": [
"app/helper.php"
],
,
更新composer.json
后运行composer dumpautoload
。
在声明之前一定要检查函数是否已经存在
if (!function_exists('mb_str_pad'))
// Your code
【讨论】:
添加后是否运行了composer dumpautoload
。【参考方案2】:
除了在 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;
【讨论】:
以上是关于Laravel 自定义字符串帮助文件的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Vuejs 实战:开发知乎 (33)自定义helper方法