IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Impossible d'accèder aux méthodes de la classe User dans un controller


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 129
    Par défaut Impossible d'accèder aux méthodes de la classe User dans un controller
    Bonjour à tous,

    Je n'arrive pas à comprendre pour quelle raison le controller ci dessous ne m'affiche pas les méthodes de la classe Users dont il est dépendant, notamment les méthodes "setPassword()" et ne reconnaît pas la variable "$user" dans la méthode "hashPassword() non plus ...

    Est-ce que je me trompe dans l'injection de dépendances ?

    J'ai bien mon User qui s'affiche quand je fais un dd($user) ou un ->getUser() mais je ne peux ensuite chaîner un get->firstName() ou autre méthode existante dans la classe ...

    Merci pour vos réponses

    UsersController.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    <?php
    
    namespace App\Controller;
    
    use App\Entity\Annonces;
    use App\Entity\Users;
    use App\Form\AnnoncesType;
    use App\Form\EditProfileType;
    use Doctrine\Persistence\ManagerRegistry;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Component\Security\Core\User\UserInterface;
    
    class UsersController extends AbstractController
    {
        #[Route('/users', name: 'users')]
        public function index(Users $user): Response
        {
            return $this->render('users/index.html.twig');
        }
    
        #[Route('/users/annonces/ajout', name: 'users_annonces_ajout')]
        public function ajoutAnnonce(Request $request, ManagerRegistry $doctrine): Response
        {
            $annonce = new Annonces();
            $form = $this->createForm(AnnoncesType::class, $annonce);
    
            $form->handleRequest($request);
    
            if ($form->isSubmitted() && $form->isValid()) {
    
                $annonce->setUser($this->getUser());
                $annonce->setActive(false);
                $em = $doctrine->getManager();
                $em->persist($annonce);
                $em->flush();
    
                return $this->redirectToRoute('users');
            }
    
            return $this->render('users/annonces/ajout.html.twig', [
                'form' => $form->createView(),
            ]);
        }
    
        #[Route('/users/profil/modifier', name: 'users_profil_modifier')]
        public function editProfile(Request $request, ManagerRegistry $doctrine): Response
        {
            $user = $this->getUser();
            $form = $this->createForm(EditProfileType::class, $user);
    
            $form->handleRequest($request);
    
            if ($form->isSubmitted() && $form->isValid()) {
    
                $em = $doctrine->getManager();
                $em->persist($user);
                $em->flush();
                $this->addFlash('message', 'profil mis à jour.');
    
                return $this->redirectToRoute('users');
            }
    
            return $this->render('users/editprofile.html.twig', [
                'form' => $form->createView(),
            ]);
        }
        #[Route('/users/password/modifier', name: 'users_password_modifier')]
        public function editPassword(Request $request, ManagerRegistry $manager, UserPasswordHasherInterface $passwordHasher,UserInterface $user): Response
        {
            dd($user);
            if ($request->isMethod('POST')) {
    
                $em = $manager->getManager();                 
    
                if ($request->request->get('password') == $request->request->get('password2')) {
    
                    $user->setPassword($passwordHasher->hashPassword($user, $request->request->get('password')));
                    
                    $em->flush();
                    
                    $this->addFlash('message', 'Mot de passe mis à jour avec succès');
    
                    return $this->redirectToRoute('users');
                } else {
                    $this->addFlash('error', 'Les deux mots de passe ne sont pas identiques');
                }
            }
            return $this->render('users/editpassword.html.twig');
        }
    
        #[Route('/users/data',name:'users_data')]
        public function usersData(){
            return $this->render("users/data.html.twig");
        }
    }

  2. #2
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 435
    Par défaut
    Bonjour,

    Pourquoi ne pas utiliser $this->getUser() pour récupérer l'utilisateur, comme dans les autres méthodes de ton contrôleur ?
    Dans un service, tu peux utiliser la classe Symfony\Bundle\SecurityBundle\Security (depuis la version 6.2) ou Symfony\Component\Security\Core\Security.
    https://symfony.com/doc/current/secu...he-user-object

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 129
    Par défaut
    Bonjour Pytet,

    Justement, j'utilisais $this->getUser() avant mais ça s'arrête là, si je fais un dd($this->getUser() ) je vois bien toutes les méthodes de l'user mais ensuite si je fais par exemple $this->getUser()->getFirstname() il ne reconnaît pas la seconde méthode, j'ai aussi essayé $this->getUser(user.firstname) marche pas non plus...

    J'ai accès aux méthodes que si j'injecte "User $user" dans le controller mais du coup le passwordHasher signale aussi une erreur et bloque tout...

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 129
    Par défaut
    Alors je me réponds à moi même :

    Il fallait rajouter un $this partout car on ne peut chaîner sur les méthodes après un $this->getUser(), il faut donc utiliser par exemple :

    $user = $this->getUser();

    $this->$user->setPassword($passwordHasher->hashPassword($this->$user, $request->request->get('password')));

    C'est lourd mais c'est la seule méthode que j'ai trouvé car les méthodes ne sont pas accessibles si l'on ne fait pas un new User avant...

Discussions similaires

  1. impossible d'accéder aux méthodes de l'objet document
    Par Velatus dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 30/08/2010, 14h24
  2. Accéder aux méthodes d'une classe
    Par doubiste_59 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 28/07/2010, 16h09
  3. Comment accéder aux méthodes d'un objet hors de la classe ?
    Par floating_inkpot dans le forum Windows Forms
    Réponses: 0
    Dernier message: 18/04/2010, 21h26
  4. Réponses: 5
    Dernier message: 23/04/2007, 16h31
  5. [TOMCAT] JSP problème d'accès aux méthodes d'une classes
    Par gunnm dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 22/05/2004, 14h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo