Как скрыть или удалить доступные по умолчанию консольные команды?

Я создал новый проект Symfony 4 через symfony new my_project_name.

В настоящее время, когда я выполняю ./bin/console, вывод показывает

консольный вывод

Я создам несколько пользовательских консольных команд и хочу показывать только свои пользовательские команды, когда я делаю ./bin/console

Возможно, мне следует создать собственную исполняемую «консоль» с нуля, но я не знаю, как это сделать.


person matthieu lopez    schedule 28.10.2019    source источник


Ответы (1)


Вы создаете законченное приложение Symfony, поэтому доступны все команды, предоставляемые включенными пакетами.

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

Начальная загрузка проекта:

Во-первых, не используйте команду symfony, нет необходимости. Обычный старый композитор сделает свое дело.

В пустом каталоге выполните:

composer require symfony/console

Это позволит импортировать единственную зависимость, необходимую для консольного проекта, и выполнить базовую загрузку для вашего автозагрузчика.

В composer.json добавьте следующее:

"autoload": {
    "psr-4": {
      "App\\": "src/"
    }
  }

Командный класс

Вам понадобится одна или несколько команд, чтобы фактически добавить их в ваше приложение. Начнем с полноценного приветственного приложения. Создайте файл src/Greet.php в своем проекте:

declare(strict_types=1);

namespace App;

use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;

class Greet extends Symfony\Component\Console\Command\Command
{
    protected function configure()
    {
        $this->addArgument('person', InputArgument::OPTIONAL, 'Name of the Entity being greeted', 'World');
        $this->addOption('greeting', 'g', InputOption::VALUE_OPTIONAL, 'How to greet the entity', 'Hello');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $greeting = $input->getOption('greeting');
        $entity   = $input->getArgument('person');

        $output->writeln("<info>$greeting $entity!</info>");

    }
}

Это базовая команда, которая напечатает «Hello World!» если выполняется без каких-либо опций или аргументов, будет принят один аргумент вместо «Мир» и одна опция для установки приветствия вместо «Привет».

Консольное приложение

В корне проекта создайте файл app.php.

require __DIR__ . '/vendor/autoload.php';
$app = new Symfony\Component\Console\Application('Hello World App', '1.0.0');
$app->add((new App\Greet('greet')));
$app->run();

Это будет очень короткий сценарий, так что давайте построчно.

  1. Требуется автозагрузчик. Этот скрипт является точкой входа для приложения, поэтому нам нужно выполнить автозагрузчик.
  2. Создать экземпляр приложения. Это создает новый экземпляр приложения Symfony Console, устанавливает имя и версию для приложения. Это будет использоваться в распечатках «справки» для приложения.
  3. Добавьте команду. По умолчанию в приложении вообще нет команд. Нам нужно добавить команду, которую мы только что создали. add() ожидает экземпляр Command. Мы создаем только что созданную команду и устанавливаем, чтобы она вызывалась по имени «greet».
  4. Запустите приложение

Сгенерировать автозагрузчик.

Выполните composer dump-autoload, чтобы сгенерировать автозагрузчик для вашего приложения.

Выполните скрипт.

Если вы сейчас выполните php app.php, вы получите:

Hello World App 1.0.0

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  greet
  help   Displays help for a command
  list   Lists commands

Обратите внимание, что доступна только одна команда — greet. Что вы можете использовать следующим образом:

# php app.php greet
Hello World!
# php app.php greet Alice
Hello Alice!
# php app.php greet Bob -g "Good morning"
Good morning Bob!
# php app.php help greet
Usage:
  greet [options] [--] [<person>]

Arguments:
  person                     Name of the Entity being greeted [default: "World"]

Options:
  -g, --greeting[=GREETING]  How to greet the entity [default: "Hello"]
[... default generic options omitted]
person yivi    schedule 29.10.2019