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 :

Une erreur que je ne comprends pas [Débutant(e)] [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 29
    Points : 13
    Points
    13
    Par défaut Une erreur que je ne comprends pas
    Bonsoir à tous, sous symfony2 je rencontre une erreur quand je veux persister 2 entités par une requette via un formulaire.

    Je recois cette erreur :

    Catchable Fatal Error: Object of class Che\Test\TestBundle\Entity\Product_test could not be converted to string in C:\wamp\www\Symfony\vendor\doctrine-dbal\lib\Doctrine\DBAL\Statement.php line 98

    Il faut que ma classe puisse être convertie en string ??

    Merci d'avance

  2. #2
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Bonjour,

    Il faudrait nous montrer le code mis en place pour que l'on puisse t'aider.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Mon but est un exercice sur les entités, les formulaires, et persister les données.

    J'ai une entité product contenant le nom d'un produit et une entité productInfo contenant la description du produit.

    J'ai fais une relation OneToOne entre les deux, imbriqué les deux formulaires, tout s'affiche bien dans le template l'erreur arrive au moment de persister les données..

    Je bloque dessus depuis ce matin..
    Je vous détaille mes sources ci-dessous (désolé si c'est un peu verbeux)

    J'y ai mis un suffixe _test simplement car je fais des test pour m'entrainer et assimiler les mécanismes

    Mon entité product
    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
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
     
    <?php
     
    namespace Che\Test\TestBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * Che\Test\TestBundle\Entity\Product_test
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="Che\Test\TestBundle\Entity\Product_testRepository")
     */
    class Product_test
    {
        /**
         * @var integer $id
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
     
        private $id;
    	/**
    	* @var integer $product_info
         *
         * @ORM\Column(name="product_info", type="integer")
         * 
    	 * @ORM\OneToOne(targetEntity="Che\Test\TestBundle\Entity\ProductInfo_test")
    	**/
     
    	protected $product_info;	//ProductInfo Entity
     
     
        /**
         * @var string $name
         *
         * @ORM\Column(name="name", type="string", length=255)
         */
        private $name;
     
        /**
         * @var integer $category_id
         *
         * @ORM\Column(name="category_id", type="integer")
         */
        private $category_id;
     
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set name
         *
         * @param string $name
         */
        public function setName($name)
        {
            $this->name = $name;
        }
     
        /**
         * Get name
         *
         * @return string 
         */
        public function getName()
        {
            return $this->name;
        }
     
        /**
         * Set category_id
         *
         * @param integer $categoryId
         */
        public function setCategoryId($categoryId)
        {
            $this->category_id = $categoryId;
        }
     
        /**
         * Get category_id
         *
         * @return integer 
         */
        public function getCategoryId()
        {
            return $this->category_id;
        }
     
        /**
         * Set product_info
         *
         * @param Che\Test\TestBundle\Entity\ProductInfo_test $productInfo
         */
        public function setProductInfo(\Che\Test\TestBundle\Entity\ProductInfo_test $productInfo)
        {
            $this->product_info = $productInfo;
        }
     
        /**
         * Get product_info
         *
         * @return Che\Test\TestBundle\Entity\ProductInfo_test 
         */
        public function getProductInfo()
        {
            return $this->product_info;
        }
     
     
     
    }
    Mon entité productInfo

    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
     
    <?php
     
    namespace Che\Test\TestBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * Che\Test\TestBundle\Entity\ProductInfo_test
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="Che\Test\TestBundle\Entity\ProductInfo_testRepository")
     */
    class ProductInfo_test
    {
        /**
         * @var integer $id
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         * @var string $description
         *
         * @ORM\Column(name="description", type="string", length=255)
         */
        private $description;
     
     
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set description
         *
         * @param string $description
         */
        public function setDescription($description)
        {
            $this->description = $description;
        }
     
        /**
         * Get description
         *
         * @return string 
         */
        public function getDescription()
        {
            return $this->description;
        }
    }
    formBuilder productType
    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
     
    <?php
     
    namespace Che\Test\TestBundle\Form;
     
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
    use Che\Test\TestBundle\Form\ProductInfo_testType;
     
    class Product_testType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
                ->add('name')
                ->add('category_id')
    			->add('product_info', new ProductInfo_testType())
            ;
        }
     
    	public function getDefaultOptions(array $options)
        {
             return array('data_class' => 'Che\Test\TestBundle\Entity\Product_test',);
        }
     
        public function getName()
        {
            return 'product';
        }
    }
    formBuilder productInfoType

    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
    <?php
    
    namespace Che\Test\TestBundle\Form;
    
    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\FormBuilder;
    
    class ProductInfo_testType extends AbstractType
    {
        public function buildForm(FormBuilder $builder, array $options)
        {
            $builder
                ->add('description', 'textarea')
            ;
        }
    	
    	public function getDefaultOptions(array $options)
        {
             return array('data_class' => 'Che\Test\TestBundle\Entity\ProductInfo_test',);
        }
    
        public function getName()
        {
            return 'productinfo';
        }
    }
    
    et la fonction de mon controlleur :
    
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    123456789101112131415161718192021222324252627282930
     
    public function createAction()
        {
            $product = new Product_test();
    		$product_info = new ProductInfo_test();
    		$product->setProductInfo($product_info);
    		$form = $this->createForm(new Product_testType(), $product);
     
    		$request = $this->get('request');
    		if($request->getMethod() == 'POST')
    		{
    			$form->bindRequest($request);
    			if ($form->isValid()) {
    				$em = $this->getDoctrine()->getEntityManager();
    				$description=$form->getData('description');
    				$product->getProductInfo()->setDescription($description);
    				$product->setCategoryId($form->getData('category_id'));
    				$product->setName($form->getData('name'));
    				$em->persist($product);
    				//$em->persist($product->getProductInfo());
    				$em->flush();
     
    				return $this->redirect($this->generateUrl('product_test_show', array('id' => $product->getId())));
     
    			}
    		}
            return $this->render('CheTestTestBundle:Product_test:addNew.html.twig', array(
                'form'   => $form->createView()
            ));
        }

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour il y aune erreur sur ton mapping
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /**
    * @var integer $product_info
    *
    * @ORM\Column(name="product_info", type="integer")
    * 
    * @ORM\OneToOne(targetEntity="Che\Test\TestBundle\Entity\ProductInfo_test")
    **/
    protected $product_info;
    l'attribut product_info est un objet de classe ProductInfo et pas un entier
    tu ne peux pas le mapper à la fois comme un entier et comme une association
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /**
    * @var integer Che\Test\TestBundle\Entity\ProductInfo_test
    * @ORM\OneToOne(targetEntity="Che\Test\TestBundle\Entity\ProductInfo_test")
    **/
    protected $product_info;
    Je pense que c'est idem pour ton attribut category_id, avec Doctrine on ne mappe pas directement les colonnes qui sont des clés étrangères.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    C'était bien ça ! Merci beaucoup j'ai galéré comme un fou la dessus j'ai essayé de passer des __toString() et tout...

    Encore merci !

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

Discussions similaires

  1. Ce code produit une erreur que je ne comprend pas
    Par Andrew_Hobson dans le forum Débuter
    Réponses: 4
    Dernier message: 19/08/2009, 09h20
  2. une erreur que je ne comprend pas
    Par shyx21 dans le forum C#
    Réponses: 3
    Dernier message: 02/04/2008, 18h25
  3. Une erreur que je ne comprend pas
    Par Macss dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/12/2007, 19h44
  4. [Tableaux] Une erreur que je ne comprend pas
    Par bibom dans le forum Langage
    Réponses: 2
    Dernier message: 01/08/2006, 18h47
  5. [PostGreSQL] une erreur que je ne comprends pas
    Par flo78 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/02/2006, 10h18

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