Bonjour,
Je crée un formulaire de modification pour l'utilisateur ou il peut modifier :
je voudrais que si le mot de passe est vide il ne change pas or, quand je soumet le formulaire il y a une erreur qui me dit
Type error: Argument 1 passed to AppBundle\Entity\User::setPassword() must be of the type string, null given, called in J:\Applications\wamp64\www\labo\CGHBasket_symf20180126_3.4.3\vendor\symfony\symfony\src\Symfony\Component\PropertyAccess\PropertyAccessor.php on line 623
// Pour corriger j'ai appliquer cette modification
public function setPassword(?string $password)
{
$this->password = $password;
}
Mais le mot de passe change tout de même.
Donc je me suis dit, si je supprime les données du password dans le PRE_SUBMIT sa réglera le probléme
$builder->addEventListener
(
FormEvents::PRE_SUBMIT,
function(FormEvent $event) {
$form = $event->getForm();
$user = $event->getData();
if($user['password']['first'] == $user['password']['second'] && empty($user['password']['first'])) {
unset($user['password']);
}
dump($user);
//$form->addError(new FormError('TEST'));
$event->setData($user);
}
);
Malheureusement cela ne fonctionne pas, je pense donc que je m'y prend mal il y a sans doute une solution qui permet de dir "Si un champ est vide tu l'ignore".
Merci pour votre aide :)
Bonsoir.
Ta question me parait similaire à celle que tu avais posé à ton dernier sujet et auquel j'ai répondu.
Je ne suis pas sûr cette fois que les groupes peuvent résoudre le probléme. Dans mon formulair précédent qui était la Connexion je n'avais pas besoin du nom et prénom donc avec les groups sa a fonctionner nickel.
La le soucie c'est que password j'en ai besoin sauf que quand il est vide il faut qu'au moment du update il ne ce modifie pas. Pour le moment j'ai trouver une solution qui fonctionne mais s'il y a une solution plus propre je suis preneur.
(Au passage je voulais te remercier pour ton aide mais une fois qu'on a m'y en resolut on ne peut plus mettre de message :/ donc j'en profite, merci :) )
Sinon voici ma solution actuelle :
public function EditAction(Request $request) {
$session = $this->get('session');
if($this->isUserAuth(-1) == false) {
return $this->redirectToRoute('error_deny');
}
$options = [];
$options['name'] = 'member';
$options['title'] = 'Member - modification';
$user = $this->getDoctrine()
->getRepository(User::class)
->find($session->get('user')->getId());
$cloneUser = clone $user;
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
$user = $form->getData();
// Si le mot de passe est vide alors on met l actuel
if(is_null($user->getPassword()) == true) {
$user->setPassword($cloneUser->getPassword());
}
else
{
$user->hashPassword();
}
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
$session->set('user', $user);
}
$options['form'] = $form->createView();
return $this->render('./CGH/pages/members/edit-member.html.twig', $options);
}