Как скрыть или удалить по умолчанию доступные консольные команды? - PullRequest
1 голос
/ 29 октября 2019

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

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

console output

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

Возможно, мне следует создать настраиваемый исполняемый файл 'console' с нуля, но я не знаю, как это сделать.

1 Ответ

1 голос
/ 29 октября 2019

Вы создаете полное приложение 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!»если выполняется без какой-либо опции или аргумента, примет один аргумент использования вместо «World» и один вариант для установки приветствия вместо «Hello».

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

В корне проекта создайте файл 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]
...