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 :

Error: Call to a member function get() on a non-object


Sujet :

Symfony PHP

  1. #1
    Membre éclairé
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Par défaut Error: Call to a member function get() on a non-object
    Bonjour tous,

    j'ai un probléme que j'arrive pas à le résoudre. je suis en train d'ajouter (POST) des données dans ma BD. Donc j'ai developpé une foncion "AjouterActif()" dans la couche metier, voilà mon essai:
    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
     
     
    class ActifsImpl extends Controller implements ActifsMetier
    {
    public function AjouterActif(Request $request){
     
        $actif = new actifs();
         $form = $this->createForm(new ActifsType(),$actif);
         $form->submit($request->request->all());
     
         if ($form->isValid()) {
             $em = $this->getDoctrine()->getManager();
             $em->persist($actif);
             $em->flush();
     
             return $actif;
         }else{
             return $form;
         }
     }
     
    }
    Voilà le code de mon controlleur:
    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
     
    public function CreateActifAction(Request $request)
     {
     
     $objactif=$this->get('emtity_manager_actifs')->AjouterActif($request) ;
     if(is_object($objactif))
    {
        return $this->redirect($this->generateUrl('Web_getUn_actifs', array('id' => $objactif->getIdactif())));
     }
     
        return $this->render('WebCIsBenchmarksActifsBundle:Default:index.html.twig',
         array('listActifs' => $entities ,
             'test' => '0',
              //'form' => $form->createView()
               )
         );
      }
    il affiche le message d'erreur suivant:
    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
    rror: Call to a member function get() on a non-object
    500 Internal Server Error - FatalErrorException
     
    //Stack Trace
    //in vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php at line 250   -
         */
        public function createForm($type, $data = null, array $options = array())
        {
            return $this->container->get('form.factory')->create($type, $data, $options);
        }
        /**
    ---
    /*at Controller ->createForm ()  in src/CisBenchMarksBundle/Metier/ActifsImpl.php at line 51   -*/
     
     public function AjouterActif(Request $request){
           $actif = new actifs();
            $form = $this->createForm(new ActifsType(),$actif); //ligne 51
            $form->submit($request->request->all());
    merci de m'aider pour résoudre ce probléme.

  2. #2
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    Call to a member function get() on a non-object
    tu fais un get sur une variable qui n'est pas un objet.

    il peut être à null ou être un tableau... à analyser...

  3. #3
    Membre éclairé
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Par défaut
    merci pour ta réponse,

    J'ai pas compris que le paramètre passé n'est un object par contre $actif est un object
    Comment je peux résoudre ce problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $form = $this->createForm(new ActifsType(),$actif); //ligne 51

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Par défaut
    Bonjour,
    si le formulaire est invalide , alors AjouterActif retourne $form . Apres $form->getIdactif() n'a pas de sens .
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     if(is_object($objactif))
    {
     
     }
    tu peux tester si $objactif est une instance de la classe d'objet machin .
    c'est plus garanti , ben j’espère .

  5. #5
    Membre éclairé
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Par défaut
    j'ai changé la fonction comme tu as dit mon ami MehrezLabidi :
    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
     
     public function AjouterActif(Request $request)
        {
         $actif = new actifs();
           // var_dump($actif); exit();
      $form = $this->createForm(new ActifsType(),$actif); // erreur ici
       $form->submit($request->request->all());
          //  $form->handleRequest($request);
     
            if ($form->isValid()) {
                $em = $this->getDoctrine()->getManager();
                $this->em->persist($actif);
                $this->em->flush();
            }
     
            return $actif;
     
     }
    le problème que la createFom ne connait pas que $actif est un objet.
    j'ai testé cette variable mais elle est null :^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $actif= new Actifs();
    var_dump($actif);
    // résultat
    object(CisBenchMarksBundle\Entity\Actifs)[570]
      private 'idactif' => null
      private 'nomActif' => null
      private 'detaille' => null
      private 'dateAjoutActif' => 
        object(Symfony\Component\Validator\Constraints\DateTime)[571]
          public 'message' => string 'This value is not a valid datetime.' (length=35)
          public 'payload' => null
      private 'dateModificationActif' => null
    et-ce -qu'il y a un service affaire ?
    merci encore ,

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Par défaut
    Si j'ai bien compris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $form = $this->createForm(new ActifsType(),$actif); // erreur ici
    tu dis que createFom ne connait pas que $actif est un objet .
    Montre nous le contenu de ActifsType .
    Es ce que 'data_class' du fichier ActifsType contient déja " CisBenchMarksBundle\Entity\Actifs" ???

  7. #7
    Membre éclairé
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Par défaut
    j'ai bien défini la classe :
    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
     
    class ActifsType extends AbstractType
    {
        /**
         * @param FormBuilderInterface $builder
         * @param array $options
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('nomActif','text')
                ->add('detaille', 'textarea',
                 array('attr'=> array('class'=> 'ckeditor')
                 )
                )
            ;
        }
     
        /**
         * @param OptionsResolverInterface $resolver
         */
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'CisBenchMarksBundle\Entity\Actifs',
                //'csrf_protection' => false,
     
     
            ));
        }
     
        /**
         * @return string
         */
        public function getName()
        {
            return 'cisbenchmarksbundle_actifs';
        }
    }

  8. #8
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Par défaut
    Je vois deux choses différentes :
    une fois mais aussi alors pensez à vérifier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    use CisBenchMarksBundle\Entity\Actifs;
     
    if ($actif instanceof Actifs) {
       echo 'Ok';exit;
    }
      else{
    echo 'wrong object ';exit;
    }
     
      $form = $this->createForm(new ActifsType(),$actif);

  9. #9
    Membre éclairé
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Par défaut
    j'ai corrigé mon code par :
    Donc il affiche "OK" c'est a dire que "$actif" et un objet "Actifs" mais il affiche aussi le même message d'erreur:
    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
     
    Error: Call to a member function get() on a non-object 500 Internal Server Error - FatalErrorException
    Stack Trace
    in vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php at line 250   -
         */
        public function createForm($type, $data = null, array $options = array())
        {
            return $this->container->get('form.factory')->create($type, $data, $options);
        }
        /**
    at Controller ->createForm () 
    in src/CisBenchMarksBundle/Metier/ActifsImpl.php at line 95   -**/
     
            $form = $this->createForm(new ActifsType(),$actif); ligne 95
            $form->submit($request->request->all());
    Bizzare ce probléme

  10. #10
    Membre éclairé
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Par défaut
    remarque:
    lorsque j'ai mis tous le traitement de la fonction "AjouterActif()" dans la fonction du mon contrôleur " CreateActifAction()". L'ajout fonctionne sans problème.
    Mais si j'utilise le cas encore rien a fonctionner j'en sais pas pourquoi ?

Discussions similaires

  1. [PDO] Fatal error: Call to a member function fetch() on a non-object
    Par blopjerem dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/12/2009, 10h53
  2. Réponses: 4
    Dernier message: 07/10/2009, 11h53
  3. Réponses: 4
    Dernier message: 02/10/2009, 10h12
  4. [PDO] Fatal error: Call to a member function setFetchMode() on a non-object in
    Par tores20 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/07/2009, 23h04
  5. [PHP 5.2] Fatal error: Call to a member function bindValue() on a non-object
    Par TeraD dans le forum Langage
    Réponses: 4
    Dernier message: 23/06/2009, 00h20

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