symfony Получить доступ к методам сущности в консольной команде

Примечание: проверено на Symfony 7 (Symfony CLI 5.7.5)

  • Задача: в консольной команде получить доступ ко всем методам сущности.
  • Краткий ответ: необходимо провести внедрение зависимости репозитория этой сущности через конструктор.
  • Примечание: класс сущности сгенерирован с помощью команды Symfony:
    php bin/console make:entity

В приведенном ниже примере команды происходит получение потомков статьи (а именно их идентификаторов и названий).

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

namespace App\Command;

use App\Repository\PostRepository;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;

#[AsCommand(name: 'post:get')]
class PostCommand extends Command
{

    public function __construct(private PostRepository $repository) 
    {
        parent::__construct();
    }

    protected function configure(): void
    {
        $this->addArgument('id', InputArgument::REQUIRED);
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {        
        $id = $input->getArgument('id');
        $children = $this->repository->find($id)->getChildren();
        foreach ($children as $v) {
            echo("[id = {$v->getId()}] " . $v->getTitle() . PHP_EOL);
        }
        return Command::SUCCESS;        
    }
}

Пример запуска команды:

php bin/console post:get 7716

Источники

Определить команду как сервис
Дополнительные аргументы в команде