symfony Получить доступ к методам сущности в консольной команде
Primary tabs
Примечание: проверено на 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
Источники
Определить команду как сервис
Дополнительные аргументы в команде
- Log in to post comments
- 364 reads