Пользовательская команда Laravel не указана - PullRequest
1 голос
/ 30 апреля 2019

У меня есть несколько кустарных команд, которые я написал.
Все они имеют общую функциональность, поэтому вместо расширения класса Command я написал класс MyBaseCommand, поэтому все команды расширяют эту:

namespace App\Console\Commands;
use Illuminate\Console\Command;

class SomeCommand extends MyBaseCommand
{
    protected $signature = 'mycommands:command1';

    protected $description = 'Some description';

    :
    :

И базовый класс:

namespace App\Console\Commands;

class MyBaseCommand extends Command
{
    :
    :

Проблема в том, что по какой-то причине эти команды больше не перечислены с php artisan.

Любая идея, как заставить laravelперечислите также эти команды?

Ответы [ 3 ]

3 голосов
/ 30 апреля 2019
protected $signature = 'mycommands:command1'; //this is your command name

Открыть app\Console\kernel.php файл.

protected $commands = [
    \App\Console\Commands\SomeCommand::class,
]

, затем запустить

php artisan list
0 голосов
/ 30 апреля 2019

Это довольно глупо, так как это может случиться с кем-то еще, я оставляю здесь ответ:

Я хотел скрыть базовый класс, поэтому внутри него была следующая строка:

protected $hidden = true;

Конечно, значение этой переменной было передано в класс высокого уровня, что сделало пользовательские команды скрытыми.

Решение состоит в том, чтобы просто добавить к этим файлам следующую строку:

protected $hidden = false;

====================== ОБНОВЛЕНИЕ ====================== 1011 *

Как упоминает @ aken-roberts, лучшим решением будет просто сделать базовый класс абстрактным:

namespace App\Console\Commands;

abstract class MyBaseCommand extends Command
{

    abstract public function handle();

    :
    :

В этом случае ремесленник не перечисляет его, и он не может быть выполнен.

0 голосов
/ 30 апреля 2019

Laravel пытается автоматически зарегистрировать команды для вас с помощью:

/**
 * Register the commands for the application.
 *
 * @return void
 */
protected function commands()
{
    $this->load(__DIR__.'/Commands');

    require base_path('routes/console.php');
}

Вы можете найти это в App\Console\Kernel.php

Убедитесь, что ваши классы имеют signature и description собственность.

enter image description here

enter image description here

...