Вспомогательный файл пользовательских строк Laravel

Я создал командный файл Artisan, который обрабатывает строки в разных кодировках.

Мне нужно было реализовать mb_str_pad функция (и нашел этот).

Я создал вспомогательный файл 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()

2-я попытка:
Я также попытался добавить сервис с:

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 ответа

Вместо определения вспомогательного файла в вашем 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;
    }
}

После создания вспомогательного файла вы должны добавить его путь к composer.json в files раздел под autoload, Тогда вы сможете использовать свою вспомогательную функцию, как и любые другие вспомогательные функции фреймворка.

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

После обновления composer.json бегать composer dumpautoload,

Обязательно проверьте, существует ли функция, прежде чем объявлять

if (!function_exists('mb_str_pad')) {
    // Your code
}
Другие вопросы по тегам