Symfony’de bir kullanıcının parolasını değiştirmek için bir konsol komutu oluşturabilirsiniz. Aşağıda, Symfony 7’de bir kullanıcı için parola değiştirme komutunun nasıl yazılacağını gösteren bir örnek bulunmaktadır:
1. Komut Sınıfını Oluştur
src/Command
dizinine aşağıdaki gibi bir komut sınıfı ekleyin:
<?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\Output\OutputInterface; use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; use Doctrine\ORM\EntityManagerInterface; use App\Repository\UserRepository; #[AsCommand( name: 'app:change-password', description: 'Kullanıcı parolasını değiştirir.', )] class ChangePasswordCommand extends Command { private $userRepository; private $passwordHasher; private $entityManager; public function __construct(UserRepository $userRepository, UserPasswordHasherInterface $passwordHasher, EntityManagerInterface $entityManager) { $this->userRepository = $userRepository; $this->passwordHasher = $passwordHasher; $this->entityManager = $entityManager; parent::__construct(); } protected function configure(): void { $this ->addArgument('email', InputArgument::REQUIRED, 'Kullanıcının e-posta adresi') ->addArgument('newPassword', InputArgument::REQUIRED, 'Yeni parola'); } protected function execute(InputInterface $input, OutputInterface $output): int { $email = $input->getArgument('email'); $newPassword = $input->getArgument('newPassword'); $user = $this->userRepository->findOneBy(['email' => $email]); if (!$user) { $output->writeln('<error>Kullanıcı bulunamadı.</error>'); return Command::FAILURE; } $hashedPassword = $this->passwordHasher->hashPassword($user, $newPassword); $user->setPassword($hashedPassword); $this->entityManager->flush(); $output->writeln('<info>Parola başarıyla değiştirildi.</info>'); return Command::SUCCESS; } }
2. Komutu Kullanma
Komutu çalıştırmak için aşağıdaki gibi terminalden çalıştırabilirsiniz:
php bin/console app:change-password [email protected] yeni-parola
Açıklamalar
- UserRepository: Kullanıcıyı bulmak için gerekli.
- UserPasswordHasherInterface: Parolayı güvenli bir şekilde hashlemek için kullanılır.
- EntityManagerInterface: Veritabanı değişikliklerini kaydetmek için gerekli.
Komut başarıyla çalıştırıldığında belirtilen kullanıcının parolası değiştirilecektir.