Автоматически добавлять автозагрузку - PullRequest
0 голосов
/ 05 февраля 2020

Я создаю «HelperCommand» для генерации помощника в Laravel. «HelperCommand» создаст файл в «app / Console / Commands / Helpers».

php помощник ремесленника: время команды. php

public function handle()
{
    $name = $this->argument('name');
    File::put(app_path().'/Console/Commands/Helpers/'.$name, '');
}

Я вручную добавляю имя файла в composer. json:

"autoload": {
    "files": [
        "app/Console/Commands/Helpers/time.php"
    ]
}

Мой вопрос: как автоматически добавить автозагрузку при создании помощника?

спасибо!

1 Ответ

0 голосов
/ 05 февраля 2020

Вы можете изменить composer.json различными способами.

Не рекомендуется

Один простой способ - использовать file_get_contents () и file_put_contents ().

$composer = file_get_contents(base_path('composer.json')); // get composer.json
$array    = json_decode($composer, true);                  // convert to array

// Add new file
$array['autoload']['files'][] = $name;

// convert to json
$json = json_encode($array, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);                               

file_put_contents(base_path('composer.json'), $json);      // Write composer.json

Но этот способ не эффективен и вы теряете много времени на обновление автозагрузчика:

composer dump-autoload

Рекомендация

Мой совет, вам следует создать свой собственный пакет composer.

У вашего провайдера пакетных услуг вы можете получить всех помощников без обновления автозагрузчика.

$files = glob(
    // app/Helpers
    app_path('Helpers') . '/*.php')
);

foreach ($files as $file) {
    require_once $file;
}

Я владелец laravel-helpers. Вы можете увидеть технику, которую я использовал там.

...