Вспомогательный файл пользовательских строк 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
}