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 :

[Form] FOSUserBundle <=> Messagerie : problème d'insertion de messages


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1
    Par défaut [Form] FOSUserBundle <=> Messagerie : problème d'insertion de messages
    Bonjour à tous,

    Je vais exposer deux trois informations avant de poser mon problème.

    Moi :
    Connaissance de PHP / MySQL : je me débrouille pas mal, ça fais 5 ans que je suis dedans.
    Connaissance de Symfony : debutant, j'ai commencé il y a 15 jours ! J'ai fait le super tuto de Jérôme Place (bravo et merci beaucoup) et plusieurs bidouilles perso pour comprendre la base de Symfony (merci au reste de la communauté SF et à google !).


    Mon but :
    Création d'une messagerie simple (expéditeur 0/n <=> 1/1 message 1/1 <=> 0/n destinataire) en utilisant la gestion d'ultilisateur de FOSUserBundle

    Action réalisé :
    1- Installation de Symfony,

    2- Installation de FOSUserBundle (la base)
    - Config de base et Routage de base
    - Création d'un MyApp/UserBundle (en utilisant la console),
    - Création d'un MyApp/UserBundle/Entity/User.php
    - Création de la table User dans la base de donnée (en utilisant la console),
    - Ajout de trois utilisateurs.(en utilisant la console),
    - Tester, ça fonctionne bien ! sans problème !

    3- Création d'un Bundle MessengerBundle (en utilisant la console)
    - Création d'un MyApp/MessengerBundle/Entity/Messenger.php
    - Création de la table Messenger dans la base de donnée (en utilisant la console),
    - Génération du CRUD pour aller plus vite à la génération des formulaires et des vues (en utilisant la console),
    - Test d'affichage, tout fonctionne bien
    - Restriction de droit dans le security pour forcer une authentifaction pour l'affichage des pages du MessengerBundle
    - Test d'affichage, tout fonctionne bien, obliger de se connecter pour voir les pages.
    - Modification de fichier MyApp\MessengerBundle\Form\MessengerType.php pour avoir uniquement les champs dont j'ai besoin.
    - Test d'insertion d'une entré via le forumaire, ça plante normale, il manque la valeur de from_id, l'utilisateur courant sous forme d'objet User appartenant à MyApp/UserBundle/Entity/User.php et la valeur du champ create_at
    - Et là voici mon problème :


    Le problème :

    - A partir de MessengerController, dans createAction, je n'arrive pas à rajouter ou plutôt à "setter" les deux valeurs manquantes.
    J'ai une erreur comme quoi l'objet User n'est pas le User de MyApp/UserBundle/Entity/User.php comme définis dans la class MyApp/MessengerBundle/Entity/Messenger.php

    Question :

    Est ce qu'il existe une method pour appeler l'User courant ou sommes nous obligé de faire l'appel à chaque fois ( $current_user = $this->container->get('security.context')->getToken()->getUser(); )?

    Pourquoi ici mon $current_user n'est pas de ma class MyApp/UserBundle/Entity/User.php.

    J'ai le sentiment d'être à coté de la plaque pour la methodologie à employer dans ce genre de cas avec symfony, qu'elle est la bonne methode (donner des exemples et cas concret si possible)

    Voici l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Catchable Fatal Error: Argument 1 passed to MyApp\MessengerBundle\Entity\Messenger::setFrom() must be an instance of MyApp\MessengerBundle\Entity\MyApp\UserBundle\Entity\User, instance of MyApp\UserBundle\Entity\User given, called in /Symfony/src/MyApp/MessengerBundle/Controller/MessengerController.php on line 79 and defined in /Symfony/src/MyApp/MessengerBundle/Entity/Messenger.php line 154

    Les fichiers :

    MyApp/MessengerBundle/entity/Messenger.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
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
     
    	 <?php
    	// MyApp\MessengerBundle\Entity\Messenger.php
    	namespace MyApp\MessengerBundle\Entity;
    	use Doctrine\ORM\Mapping as ORM;
    	use Symfony\Component\Validator\Constraints as Assert;
     
    	/**
    	* @ORM\Entity
    	*/
    	class Messenger
    	{
    	    /**
    	    * @ORM\GeneratedValue(strategy="AUTO")
    	    * @ORM\Id
    	    * @ORM\Column(type="bigint")
    	    */
    	    private $id;
     
    	    /**
    	    * @ORM\Column(columnDefinition="varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL")
    	    * @Assert\NotBlank()
    	    * @Assert\MinLength(3)
    	    */    
    	    private $object;
     
    	    /**
    	    * @ORM\Column(columnDefinition="longtext CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL")
    	    * @Assert\NotBlank()
    	    * @Assert\MinLength(3)
    	    */    
    	    private $message;
     
    	    /** # de la part de 
    	    * @ORM\OneToOne(targetEntity="MyApp\UserBundle\Entity\User")
    	    * @ORM\JoinColumn(name="from_id", referencedColumnName="id")
    	    * @Assert\NotBlank()
    	    *
    	    * @var User $user
    	    */
    	    protected $from;
     
    	    /** # à l'attention de
    	    * @ORM\OneToOne(targetEntity="MyApp\UserBundle\Entity\User")
    	    * @ORM\JoinColumn(name="to_id", referencedColumnName="id")
    	    * @Assert\NotBlank()
    	    *
    	    * @var User $user
    	    */
    	    protected $to;
     
    	    /**
    	    * @ORM\Column(type="datetime", name="created_at")
    	    * @Assert\NotBlank()
    	    *
    	    * @var DateTime $createdAt
    	    */
    	    protected $createdAt;
     
    	    /**
    	    * Get id
    	    *
    	    * @return bigint 
    	    */
    	    public function getId()
    	    {
    		return $this->id;
    	    }
     
    	    /**
    	    * Set object
    	    *
    	    * @param string $object
    	    */
    	    public function setObject($object)
    	    {
    		$this->object = $object;
    	    }
     
    	    /**
    	    * Get object
    	    *
    	    * @return string 
    	    */
    	    public function getObject()
    	    {
    		return $this->object;
    	    }
     
    	    /**
    	    * Set message
    	    *
    	    * @param string $message
    	    */
    	    public function setMessage($message)
    	    {
    		$this->message = $message;
    	    }
     
    	    /**
    	    * Get message
    	    *
    	    * @return string 
    	    */
    	    public function getMessage()
    	    {
    		return $this->message;
    	    }
     
    	    /**
    	    * Set createdAt
    	    *
    	    * @param datetime $createdAt
    	    */
    	    public function setCreatedAt($createdAt)
    	    {
    		$this->createdAt = $createdAt;
    	    }
     
    	    /**
    	    * Get createdAt
    	    *
    	    * @return datetime 
    	    */
    	    public function getCreatedAt()
    	    {
    		return $this->createdAt;
    	    }
     
    	    /**
    	    * Set to
    	    *
    	    * @param MyApp\UserBundle\Entity\User $to
    	    */
    	    public function setTo(MyApp\UserBundle\Entity\User $to)
    	    {
    		$this->to = $to;
    	    }
     
    	    /**
    	    * Get to
    	    *
    	    * @return MyApp\UserBundle\Entity\User 
    	    */
    	    public function getTo()
    	    {
    		return $this->to;
    	    }
     
    	    /**
    	    * Set from
    	    *
    	    * @param MyApp\UserBundle\Entity\User $from
    	    */
    	    public function setFrom(MyApp\UserBundle\Entity\User $from)
    	    {
    		$this->from = $from;
    	    }
     
    	    /**
    	    * Get from
    	    *
    	    * @return MyApp\UserBundle\Entity\User
    	    */
    	    public function getFrom()
    	    {
    		return $this->from;
    	    }
    	}
    MyApp/MessengerBundle/Form/MessengerType.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
     
    	<?php
    	namespace MyApp\MessengerBundle\Form;
     
    	use Symfony\Component\Form\AbstractType;
    	use Symfony\Component\Form\FormBuilder;
     
    	class MessengerType extends AbstractType
    	{
    	    public function buildForm(FormBuilder $builder, array $options)
    	    {
    		$builder
    		    ->add('to')
    		    ->add('object','text')
    		    ->add('message','textarea')        
    		;
    	    }
     
    	    public function getName()
    	    {
    		return 'myapp_messengerbundle_messengertype';
    	    }
    	}
    MyApp/MessengerBundle/Controller/MessengerController.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
     
    	 ... 
    	 public function createAction()
    	  {
    		$current_user = $this->container->get('security.context')->getToken()->getUser();  
     
    		$entity  = new Messenger();
    		$entity->setCreatedAt(date('Y-m-d H-i-s'));
    		$entity->setFrom($current_user);
     
    		$request = $this->getRequest();
    		$form    = $this->createForm(new MessengerType(), $entity);
    		$form->bindRequest($request);
     
    		if ($form->isValid()) {
    		    $em = $this->getDoctrine()->getEntityManager();
    		    $em->persist($entity);
    		    $em->flush();
     
    		    return $this->redirect($this->generateUrl('messenger__show', array('id' => $entity->getId())));
    		}
     
    		return $this->render('MyAppMessengerBundle:Messenger:new.html.twig', array(
    		    'entity' => $entity,
    		    'form'   => $form->createView()
    		));
    	  }
    	...
    A aussi, j'ai tous plein de questions bêtes à poser mais je ne sais pas si je dois faire une post pour chaque question ou bien un post unique avec toutes mes questions ?
    Par exemple : Comment mettre un label vide avec le builder ?

    Merci d'avance pour vos réponses!

  2. #2
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 2
    Par défaut
    Citation Envoyé par magnus.adlehof Voir le message
    Bonjour à tous,

    Je vais exposer deux trois informations avant de poser mon problème.

    Moi :
    Connaissance de PHP / MySQL : je me débrouille pas mal, ça fais 5 ans que je suis dedans.
    Connaissance de Symfony : debutant, j'ai commencé il y a 15 jours ! J'ai fait le super tuto de Jérôme Place (bravo et merci beaucoup) et plusieurs bidouilles perso pour comprendre la base de Symfony (merci au reste de la communauté SF et à google !).
    ....

    A aussi, j'ai tous plein de questions bêtes à poser mais je ne sais pas si je dois faire une post pour chaque question ou bien un post unique avec toutes mes questions ?
    Par exemple : Comment mettre un label vide avec le builder ?

    Merci d'avance pour vos réponses!
    pour l'accés à l'utilisateur loguer, suivant la doc symfony2, c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        $user = $this->get('security.context')->getToken()->getUser();
    J'ai testé, cela fonctionne chez moi. Je récupère bien l'entité User.
    Réf. :http://symfony.com/doc/2.0/book/security.html

Discussions similaires

  1. Réponses: 8
    Dernier message: 11/07/2012, 15h05
  2. problème d'insertion à partir de forms
    Par killua86 dans le forum Forms
    Réponses: 2
    Dernier message: 30/05/2010, 23h05
  3. Problème d'insertion des données depuis Forms 10g
    Par monthaldo dans le forum Forms
    Réponses: 5
    Dernier message: 15/03/2010, 12h59
  4. [Interbase 7] Problème d'insertion de données
    Par Tuscelan dans le forum InterBase
    Réponses: 12
    Dernier message: 19/11/2003, 22h58
  5. Problème d'insertion avec MySQL
    Par Sonny dans le forum ASP
    Réponses: 13
    Dernier message: 28/08/2003, 13h52

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