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 :

Undefined method getDoctrine in App\Validator\AmiValidator [4.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Skunka
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 135
    Par défaut Undefined method getDoctrine in App\Validator\AmiValidator
    Bonsoir,
    Lors de la demande d'ami, j'ai ajouté un custom validator sur un champ du formulaire, pour vérifier que l'utilisateur existe.
    Quand j'envoie le formulaire pour le traitement, j'ai ce message d'erreur:

    Nom : syntax error.JPG
Affichages : 2156
Taille : 17,2 Ko

    Voici mon validateur:
    Code php : 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
     
    <?php
     
    namespace App\Validator;
     
    use Symfony\Component\Validator\Constraint;
    use Symfony\Component\Validator\ConstraintValidator;
    use App\Entity\Utilisateur;
    use App\Repository\AmiRepository;
     
    class AmiValidator extends ConstraintValidator
    {
     
        public function validate($value, Constraint $constraint)
        {
     
            /* @var $constraint \App\Validator\Ami */
            $util = $this->getDoctrine()->getRepository(Utilisateur::class)->findOneBy(['identifiant',$value]);
            if ($util) {
                return;
            } 
     
            // TODO: implement the validation here
            $this->context->buildViolation($constraint->message)
                ->setParameter('{{ value }}', $value)
                ->addViolation();
        }
    }

    Merci d'avance !

  2. #2
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Par défaut
    Salut,

    Injecte le UtilisateurRepository dans le constructeur :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private $userRepository;
     
    public function __construct(UtilisateurRepository $userRepository)
    {
        $this->userRepository = $userRepository;
    }
    Ensuite tu peux l'utiliser avec : $this->userRepository->findOneBy(['identifiant',$value]);

  3. #3
    Membre confirmé Avatar de Skunka
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 135
    Par défaut
    Super, je peux faire appelle à la fonction mais elle me retourne une erreur :
    Unrecognized field: 0
    Nom : 5614.JPG
Affichages : 2112
Taille : 13,9 Ko

    Ce qui correspond à la ligne:
    $util = $this->utilRepository->findOneBy(['identifiant',$value]);

  4. #4
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Par défaut
    Est-ce que tu as bien une propriété "identifiant" sur l'entité concernée par l'appel de findOneBy ?

    N'hésite pas à nous montrer ton code en entier pour nous aider à comprendre d'où cela pourrait venir.

  5. #5
    Membre confirmé Avatar de Skunka
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 135
    Par défaut
    Attention, voila le code en entier:

    App\Entity\Utilisateur.php:
    Code php : 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
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    <?php
     
    namespace App\Entity;
     
    use Doctrine\Common\Collections\ArrayCollection;
    use Doctrine\Common\Collections\Collection;
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
    use Symfony\Component\Security\Core\User\UserInterface;
     
    /**
     * @ORM\Entity(repositoryClass="App\Repository\UtilisateurRepository")
     */
    class Utilisateur
    {
        /**
         * @ORM\Id()
         * @ORM\GeneratedValue()
         * @ORM\Column(type="integer")
         */
        private $id;
     
        /**
         * @ORM\Column(type="string", length=255)
         */
        private $identifiant; // Ma propriété identifiant
     
        /**
         * @ORM\Column(type="string", length=255)
         */
        private $motDePasse;
     
        /**
         * @ORM\Column(type="string", length=255, nullable=true)
         */
        private $surnom;
     
        /**
         * @ORM\ManyToOne(targetEntity="App\Entity\Permission", inversedBy="utilisateurs")
         * @ORM\JoinColumn(nullable=false)
         */
        private $permission;
     
        /**
         * @ORM\Column(type="string", length=255, nullable=true)
         */
        private $email;
     
        public function __construct(Permission $permission=null){
            $this->permission = $permission;
        }
     
        public function getId(): ?int
        {
            return $this->id;
        }
     
        public function getIdentifiant(): ?string
        {
            return $this->identifiant;
        }
     
        public function setIdentifiant(string $identifiant): self
        {
            $this->identifiant = $identifiant;
     
            return $this;
        }
     
        public function getMotDePasse(): ?string
        {
            return $this->motDePasse;
        }
     
        public function setMotDePasse(string $motDePasse): self
        {
            $this->motDePasse = $motDePasse;
     
            return $this;
        }
     
        public function getSurnom(): ?string
        {
            return $this->surnom;
        }
     
        public function setSurnom(?string $surnom): self
        {
            $this->surnom = $surnom;
     
            return $this;
        }
     
        public function getPermission(): ?Permission
        {
            return $this->permission;
        }
     
        public function setPermission(?Permission $permission): self
        {
            $this->permission = $permission;
     
            return $this;
        }
     
        public function getEmail(): ?string
        {
            return $this->email;
        }
     
        public function setEmail(?string $email): self
        {
            $this->email = $email;
     
            return $this;
        }
     
    }

    AmiController:
    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
    <?php
     
    namespace App\Controller;
     
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Session\Session;
    use App\Entity\Utilisateur;
    use App\Entity\Ami;
    use App\Form\AmiType;
     
    class AmiController extends AbstractController
    {
        public function index(Request $req) // Affiche les amis et le formulaire d'ajout
        {
            $util = $req->getSession()->get('util');
            $amis = $this->getDoctrine()->getRepository(Ami::class)->chargerListeAmi($util->getId());
     
            $form = $this->createForm(AmiType::class);
            $form->handleRequest($req);
     
            return $this->render('ami/index.html.twig', [
                'amis' => $amis,
                'form' => $form->createView(),
            ]);
        }
     
        public function add(Request $req){ // Appelé lors de l'ajout d'un ami
            $form = $this->createForm(AmiType::class);
            $form->handleRequest($req); 
     
            if ($form->isSubmitted() && $form->isValid()) { /
                $ami = new Ami($util, $target);
     
                $em = $this->getDoctrine()->getManager();
                $em->persist($ami);
                $em->flush();
     
                $this->addFlash('success','Requête d\'ami envoyée !');
     
                return $this->redirectToRoute('skunka_amis');
            } else {
                $this->addFlash('error','Utilisateur non trouvé !');
     
                return $this->redirectToRoute('skunka_amis');
            }
        }
    }
    ami/index.html.twig:
    Code twig : 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
    {% extends 'base.html.twig' %}
     
    {% block body %}
        <div class="ami_liste">
            <ul>
                {% for ami in amis %}
                    <li>{{ ami.utiltarget.identifiant }}</li>
                {% endfor %}
            </ul>
        </div>
     
        <div class="ami_ajout">
        {# {% for notice in app.session.flashBag.get('success','error') %}
            <h2>{{ notice }}</h2>
        {% endfor %} #}
     
        {{ form_start(form, {'attr':{'class':'form', 'action': path('skunka_amis_add') } }) }} // Formulaire d'ajout
            {{ form_errors(form) }}
            {{form_label(form.identifiant) }}
            {{ form_widget(form.identifiant) }}
            {{ form_errors(form.identifiant) }}
            {{ form_widget(form.save) }}
        {{ form_end(form) }}
        </div>
    {% endblock %}

    AmyType:
    Code php : 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
    <?php
     
    namespace App\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolver;
     
    use Symfony\Component\Form\Extension\Core\Type\TextType;
    use Symfony\Component\Form\Extension\Core\Type\SubmitType;
     
    use App\Validator\Ami;
     
    class AmiType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('identifiant', TextType::class, [
                    'label' => 'Identifiant',
                    'constraints' => [new Ami() // AmiValidator
                ]])
                ->add('save', SubmitType::class, [
                    'label' => 'AJOUTER',
                    'attr' => ['class' => 'btn btn-info']
                ])
            ;
        }
     
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults([
                // Configure your form options here
            ]);
        }
    }

    Voilà, il y a normalement tout !

  6. #6
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Par défaut
    Peux-tu aussi montrer le code à jour du AmiValidator stp ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PDO] Call to undefined method PDOStatement::lastinsertid()
    Par megacool dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/10/2008, 15h32
  2. [Artichow] Call to undefined method Graph::getDrawer()
    Par belocom dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 17/04/2008, 22h56
  3. Réponses: 0
    Dernier message: 25/02/2008, 17h28
  4. erreur 1180: Call to a possibly undefined method
    Par Tosh dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 09/12/2007, 23h02
  5. undefined method `cattr_accessor' for ActiveRecord::Base:Cl
    Par r0nsync dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 02/08/2007, 14h41

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