Иногда нам не нужно разворачивать весь Symfony фреймворк со всеми его пакетами полностью. Это приложение может быть слишком громоздким.

Предположим, что нам нужна только одна консольная (console) команда, которая будет выполнять какие-то действия. Все остальные пакеты Symfony будут лишними.

Если вам, что-то будет из этой статьи не понятно, посмотрите мои видео уроки по Symfony:
https://webkyrs.info/razdel/symfony

Так можно получить более целостное представление о работе этого фреймворка.

Установка базовых служебных пакетов 

Итак, для создания минимального консольного приложения, мы с вами должны воспользоваться специальным пакетом symfony/skeleton.

https://github.com/symfony/skeleton

Это минимальный каркас Symfony, на который мы навешаем все необходимые нам в будущем пакеты. 

В папке с нашим проектом выполняем команду:

composer require symfony/skeleton

У нас появился самый минимальный Symfony пакет, но он пока ничего не умеет делать.

Первый пакет, который нам понадобиться

composer require symfony/flex

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

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

composer require symfony/runtime

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

И еще один служебный пакет, который нужен для работы с окружением Symfony

composer require symfony/yaml

Он добавляет поддержку формата yaml, который используется для конфигурационных файлов в Symfony по умолчанию.

Установка главного пакеты для работы с console

Со служебными пакетами все. Теперь нам нужен главный пакет, с помощью которого и будут работать наши консольные команды

composer require symfony/console

После его установки у нас должен появиться служебный файл и папка bin/console. Через этот файл и будут запускаться наши консольные команды.

Создание файла для логики команды

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

composer require --dev symfony/maker-bundle

Он добавляет поддержку консольных команд для быстрой кодогенерации.

Но, пока мы не можем воспользоваться этими командами, т.к. в нашем проекте не настроена автозагрузка компонентов. Давайте это настроим.

Нужно открыть файл composer.json и добавить туда autoload секцию. В итоге содержимое файла будет примерно такое

{
   "require": {
       "symfony/skeleton": "^7.0",
       "symfony/flex": "^2.4",
       "symfony/runtime": "^7.0",
       "symfony/yaml": "^7.0",
       "symfony/console": "^7.0"
   },
   "autoload": {
     "psr-4": {
       "App\\": "src/"
     }
   },
   "config": {
       "allow-plugins": {
           "symfony/flex": true,
           "symfony/runtime": true
       }
   },
   "require-dev": {
       "symfony/maker-bundle": "^1.59"
   },
   "scripts": {
       "auto-scripts": {
           "cache:clear": "symfony-cmd",
           "assets:install %PUBLIC_DIR%": "symfony-cmd"
       }
   }
}

Чтобы composer выполнил автозагрузку всех компонентов выполняем команду

composer dump -o

Теперь мы можем сгенерировать файл, который будет содержать логику консольной команды

php bin/console make:command

и придумываем имя для будущей команды. Например, я называл команду

test-command

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

Можно убрать там все лишнее и оставить только следующий код:

<?php


namespace App\Command;


use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;


#[AsCommand(
   name: 'test-command',
   description: 'Add a short description for your command',
)]
class TestCommand extends Command
{
   public function __construct()
   {
       parent::__construct();
   }


   protected function configure(): void
   {
      
   }


   protected function execute(InputInterface $input, OutputInterface $output): int
   {
       $output->writeln("Hello World");
       return Command::SUCCESS;
   }
}

Чтобы запустить эту команду выполняем php bin/console test-command

и в итоге мы должны получить Hello world надпись.

Более подробно про работу с командами в Symfony можно посмотреть в этом моем курсе:

https://webkyrs.info/category/bystryi-start-v-symfony

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

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