Comme vous avez peut -être remarqué il utilise symfony 3, et utilise à un moment security.password_encoder. Or quand je l'utilise, ça me marque une erreur comme ça :
security.password_encoder
Je me suis donc renseigné pour voir si il y a avait la même chose mais pour Symfony 4, mais je n'ai pas trouvé.
Je viens donc demandé si vous aviez une idée pour résoudre mon problème.
Je vous donne mon code pour mon controller :
class RegistrationController extends AbstractController
{
/**
* @Route("/register", name="registration")
*
*/
public function index(Request $request)
{
$user = new User();
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$password= $this
->get('security.password_encoder')
->encodePassword($user, $user->getPlainPassword()
);
$user->setPassword($password);
$manager = $this->getDoctrine()->getManager();
$manager->persist($user);
$manager->flush();
$this->addFlash('success', 'Tu es bien enregistré !');
$this->redirectToRoute('homepage');
}
return $this->render('registration/index.html.twig', [
'registration_form' => $form->createView(),
]);
}
}
J'ai ré-essayé en suivant la doc mais une fois avoir fait les modifications j'ai ce message d'erreur :
Argument 1 passed to Symfony\Component\Security\Core\Encoder\UserPasswordEncoder::encodePassword() must implement interface Symfony\Component\Security\Core\User\UserInterface, instance of App\Entity\User given, called in D:\wamp64\www\lordweb\src\Controller\RegistrationController.php on line 35
Et j'ai beau instancier tout ce que je veux ça ne change rien...
Voici mon code à présent :
<?php
namespace App\Controller;
use App\Entity\User;
use App\Form\UserType;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Security\Core\User\UserInterface;
class RegistrationController extends AbstractController
{
/**
* @Route("/register", name="registration")
*
*/
public function index(Request $request, UserPasswordEncoderInterface $encoder)
{
$user = new User();
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$plainPassword = $user->getPlainPassword();
$encoded = $encoder->encodePassword($user, $plainPassword);
$user->setPassword($encoded);
$manager = $this->getDoctrine()->getManager();
$manager->persist($user);
$manager->flush();
$this->addFlash('success', 'Tu es bien enregistré !');
$this->redirectToRoute('homepage');
}
return $this->render('registration/index.html.twig', [
'registration_form' => $form->createView(),
]);
}
}
Bonjour, je me permet de relancer ce ticket car j'ai la même erreur que OP, mais je ne comprend pas la solution qui a été apportée, en effet il y a bien :
Bonjour, je me permet de relancer ce ticket car j'ai la même erreur que OP, mais je ne comprend pas la solution qui a été apportée, en effet il y a bien :
Tout d'abord désolé pour le temps de réponse, j'espère que tu as trouvé la solution.
Pour ma part ça fait un an et demi que j'ai arrêté Symfony mais si mes souvenir sont bons, après avoir importé UserInterface via le use il faut l'instancier en ajoutant :
namespace App\Security\User;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\EquatableInterface;
class WebserviceUser implements UserInterface, EquatableInterface
{
...Code
J'espère que ça fonctionne il me semble que mon erreur avait été cet oubli tout simplement...
Bonne journée et bon courage.
Mathieu Gervais
[Symfony 4] - security.password_encoder not found
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mathieu Gervais
Mathieu Gervais
Mathieu Gervais
Mathieu Gervais