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
- 608 reads