Динамически зарегистрировать команды в Laravel - PullRequest
0 голосов
/ 20 мая 2019

Я могу регистрировать события программно Illuminate\Support\Facades\Event и это метод слушателя.Я хотел бы зарегистрировать команду динамически аналогичным образом.Есть ли способ сделать это в Laravel?Или как лучше всего использовать Laravel, кроме регистрации внутри app/Console/Kernel.php?

Обновление Я могу зарегистрировать один класс с помощью следующего кода.


use Illuminate\Console\Application as Artisan;

if (app()->runningInConsole()) {
    Artisan::starting(function ($artisan) use ($commandClass) {
        $artisan->resolveCommands($commandClass);
    });
}

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Если вы посмотрите на app/Console/Kernel.php, вы должны увидеть следующее утверждение:

$this->load(__DIR__.'/Commands');

Это означает, что все классы команд, сохраненные в app/Console/Commands/, будут автоматически загружены и зарегистрированы. Кроме того, если вы создадите команду с использованием artisan, например: php artisan make:command MyCommand, класс будет сохранен в app/Console/Commands/MyCommand.php.

0 голосов
/ 24 мая 2019

Хотя метод, предоставляемый Pablo, может быть лучшим вариантом для одного каталога, но если у вас есть команды, распределенные по разным пространствам имен и каталогам, можно добавить несколько записей в app / Console / Kernel.php

В моем случае $commandClass извлекается из нескольких xml-файлов, распределенных по нескольким пакетам композитора, поэтому мне пришлось использовать этот подход:

use Illuminate\Console\Application as Artisan;

// fetch command classes from different sources and  register it here.
if (app()->runningInConsole()) {
    Artisan::starting(function ($artisan) use ($commandClass) {
        $artisan->resolveCommands($commandClass);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...