Кілька команд в одному класі
Повʼязані команди часто ділять ті самі залежності: репозиторій, API-клієнт, логер. Досі на кожну команду був окремий клас з однаковим конструктором. Тепер їх можна зібрати в один клас, як дії контролера, і autoconfiguration зареєструє кожен позначений метод як незалежну команду.
final class UserCommands
{
public function __construct(private UserRepository $users) {}
#[AsCommand('app:user:create', description: 'Створює користувача')]
public function create(OutputInterface $output): int
{
// ...
return Command::SUCCESS;
}
#[AsCommand('app:user:delete', description: 'Видаляє користувача')]
public function delete(OutputInterface $output): int
{
// ...
return Command::SUCCESS;
}
}
#[AsCommand('app:user:create')]
final class CreateUserCommand
{
public function __construct(private UserRepository $users) {}
public function __invoke(OutputInterface $output): int { /* ... */ }
}
#[AsCommand('app:user:delete')]
final class DeleteUserCommand
{
public function __construct(private UserRepository $users) {}
public function __invoke(OutputInterface $output): int { /* ... */ }
}