Proponuje napisac przypomnienie hasla w sf4
Przebieg appki:
1. uzytkownik wpisuje w formularzu adres emailowy
class RemindPasswordType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('email', EmailType::class, [
'label' => 'label.email'
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => User::class,
'validation_groups' => [
'remind_password'
]
]);
}
}
Encja usera:
class User implements UserInterface
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string")
* @Assert\NotBlank(message="default.not_blank")
* @Assert\Email(message="default.email")
* @AcmeAssert\ExistentEmail(groups= {"remind_password"})
*/
private $email;
/**
* @ORM\Column(type="string", nullable=true)
*/
private $remindToken;
}
ExistentEmailValidator:
class ExistentEmailValidator extends ConstraintValidator
{
private $userRepository;
public function __construct(UserRepository $userRepository)
{
$this->userRepository = $userRepository;
}
public function validate($value, Constraint $constraint)
{
if (!$this->userRepository->findUserByEmail($value)) {
$this->context->buildViolation($constraint->message)->addViolation();
}
}
Problem:
Chcialbym, zeby formularz wyrzucil mi cala encje uzytkownika po mailu, zwraca obiekt usera z samym mailem, a entity manager traktuje ten obiekt jako zupelnie nowy, przez co przy flushu chce mi go zinsertowac. Przez co musze zlapac uzytkowwnika na nowo w controlerze ($rep->findUserByEmail($email)) co mnie totalnie nie zadowala. Domyslam sie, ze uzycie validation_groups chyba nie jest najlepszym pomyslem? W jaki poprawny sposob powinienem to zrobic?