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 依赖项

Laravel Vuejs 实战:开发知乎 (33)自定义helper方法

自定义laravel函数dd()

如何在 laravel 4.2 中使用带有自定义预过滤器的 AJAX 上传 CSV 文件

辅助函数未加载 laravel 5 - 调用未定义函数

自动加载帮助文件夹 Laravel 5