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 :

utilisation de form avec entity


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    ARTISAN
    Inscrit en
    Février 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : ARTISAN
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2012
    Messages : 17
    Par défaut utilisation de form avec entity
    bonjour,

    Je suis un cour sur symfony2 et j'ai un problème avec la validation d'un formulaire:

    en fait, j'ai des articles qui on pour simplifier une description et une unité et une famille.

    donc je fais un formulaire tout simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $builder
        ->add('des', 'text', array('label'  => 'descrition'))
        ->add('u', 'text', array('label'  => 'unité'))
        ->add('famille', 'text', array('label'  => 'famille'))
    ça marche très bien.

    mais mon but est de pourvoir utiliser les unités que j'ai déjà ajoutées dans ma base de donnée et donc je vais utiliser un champs de type choice.

    dans mon cas, 'entity' ce qui me donne ca:

    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
    $builder
    ->add('des', 'text', array('label'  => 'le label que je veux!!!'))
    ->add('u', 'entity', array(
    'class'         => 'KeilaBibBundle:Article',
    'property'      => 'u',
    'empty_value' => 'Choisissez une unité',//valeur vide
    'required' => true,
    'query_builder' => function(\Keila\BibBundle\Entity\ArticleRepository $r) {return $r->getdistinctu();},
    'label'         => 'Unité'))
     
    ->add('famille', 'entity', array(
    'class'         => 'KeilaBibBundle:Article',
    'property'      => 'famille',
    'empty_value' => 'Choisissez une famille',//valeur vide
    'required' => true,
    'query_builder' => function(\Keila\BibBundle\Entity\ArticleRepository $r) {return $r->getdistinctfamille();},
    'label'         => 'Famille'))
    ;
    dans mon repository j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public function getdistinctu()
    {        
          $qb = $this->createQueryBuilder('a')->orderBy('a.u', 'ASC')->groupBy('a.u');
          return $qb;
    }
    qui me charge très bien mes différentes unités mais

    1) j'ai pas le choix je dois choisir se qu'il y a dans la liste et je peux donc pas ajouter une nouvelle unité

    2) j'ai une erreur lors de la validation:"
    Catchable Fatal Error: Object of class Keila\BibBundle\Entity\Article could not be converted to string in C:\wamp\www\Symfony\vendor\doctrine\dbal\lib\Doctrine\DBAL\Statement.php line 103
    je comprend que s'est mon entity article qui pose problème mais je vois pas quel est se problème:

    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
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    <?php
     
    namespace Keila\BibBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * Article
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="Keila\BibBundle\Entity\ArticleRepository")
     */
    class Article
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         * @var string
         *
         * @ORM\Column(name="des", type="string", length=255)
         */
        private $des;
     
        /**
         * @var string
         *
         * @ORM\Column(name="u", type="string", length=5)
         */
        private $u;
     
        /**
         * @var float
         *
         * @ORM\Column(name="p", type="decimal", nullable=true, precision=8, scale=3)
         */
        private $p;
     
        /**
         * @var boolean
         *
         * @ORM\Column(name="gererenstock", type="boolean", nullable=true, options={"default":false})
         */
        private $gererenstock;
     
        /**
         * @var float
         *
         * @ORM\Column(name="qminienstock", type="decimal", nullable=true, precision=8, scale=3)
         */
        private $qminienstock;
     
        /**
         * @var float
         *
         * @ORM\Column(name="qenstock", type="decimal", nullable=true, precision=8, scale=3)
         */
        private $qenstock;
     
        /**
         * @var string
         *
         * @ORM\Column(name="famille", type="string", length=50, nullable=true)
         */
        private $famille;
     
        /**
         * @var string
         *
         * @ORM\Column(name="descriptif", type="text", nullable=true)
         */
        private $descriptif;
     
     
        /**
         * Get id
         *
         * @return integer
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set des
         *
         * @param string $des
         * @return Article
         */
        public function setDes($des)
        {
            $this->des = $des;
     
            return $this;
        }
     
        /**
         * Get des
         *
         * @return string
         */
        public function getDes()
        {
            return $this->des;
        }
     
        /**
         * Set u
         *
         * @param string $u
         * @return Article
         */
        public function setU($u)
        {
            $this->u = $u;
     
            return $this;
        }
     
        /**
         * Get u
         *
         * @return string
         */
        public function getU()
        {
            return $this->u;
        }
     
        /**
         * Set p
         *
         * @param float $p
         * @return Article
         */
        public function setP($p)
        {
            $this->p = $p;
     
            return $this;
        }
     
        /**
         * Get p
         *
         * @return float
         */
        public function getP()
        {
            return $this->p;
        }
     
        /**
         * Set gererenstock
         *
         * @param boolean $gererenstock
         * @return Article
         */
        public function setGererenstock($gererenstock)
        {
            $this->gererenstock = $gererenstock;
     
            return $this;
        }
     
        /**
         * Get gererenstock
         *
         * @return boolean
         */
        public function getGererenstock()
        {
            return $this->gererenstock;
        }
     
        /**
         * Set qminienstock
         *
         * @param float $qminienstock
         * @return Article
         */
        public function setQminienstock($qminienstock)
        {
            $this->qminienstock = $qminienstock;
     
            return $this;
        }
     
        /**
         * Get qminienstock
         *
         * @return float
         */
        public function getQminienstock()
        {
            return $this->qminienstock;
        }
     
        /**
         * Set qenstock
         *
         * @param float $qenstock
         * @return Article
         */
        public function setQenstock($qenstock)
        {
            $this->qenstock = $qenstock;
     
            return $this;
        }
     
        /**
         * Get qenstock
         *
         * @return float
         */
        public function getQenstock()
        {
            return $this->qenstock;
        }
     
        /**
         * Set famille
         *
         * @param string $famille
         * @return Article
         */
        public function setFamille($famille)
        {
            $this->famille = $famille;
     
            return $this;
        }
     
        /**
         * Get famille
         *
         * @return string
         */
        public function getFamille()
        {
            return $this->famille;
        }
     
        /**
         * Set descriptif
         *
         * @param string $descriptif
         * @return Article
         */
        public function setDescriptif($descriptif)
        {
            $this->descriptif = $descriptif;
     
            return $this;
        }
     
        /**
         * Get descriptif
         *
         * @return string
         */
        public function getDescriptif()
        {
            return $this->descriptif;
        }
    }
    j'ai ajouté un __tostring dans mon entity article qui donne ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public function __toString()
    {
        return strval($this->u);
    }
    Cet méthode valide bien mon article et l'ajoute mais:

    le 1er problème s'est que j'ai un autre champ ou je veux faire la même chose... et je suppose que je peux pas faire une deuxième function __tostring() ni l’appeler __tostring2() ...

    le 2ème problème c'est que je peux toujours pas ajouter la valeur que je veux... je dois choisir dans la liste (bon après, j'imagine qu'avec un sous formulaire sa dois pas être sorcier)

    si quelqu'un peux m'aider...(pour info je début et je comprend lentement...)

    d'avance merci

  2. #2
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Salut,

    J'ai le sentiment qu'il s'agit moins d'un problème lié à Symfony qu'un problème de conception.

    Si j'ai bien tout compris, tu souhaites créer un article possédant une unité et une famille. Ces deux champs doivent être choisis depuis une liste déroulante ou bien être créés.

    Sauf que là ou tu te plantes, c'est qu'effectivement tu as essayé de mettre une entité de type article dans un attribut (string) de ton objet article. La solution pour faire les choses logiquement serait plutôt de créer une entité Unite et une entité Famille par exemple, toutes les deux liées à Article.
    Tes attributs u et famille seraient alors des objets de la class Unite et Famille et tu aurais éventuellement une méthode __toString() dans chacune de ces entités pour afficher le résultat dans ta selectbox.

    Pour ce qui est de vouloir ajouter ou sélectionner dans le même formulaire c'est légèrement contradictoire mais tu as plusieurs manière de faire :
    - la méthode traditionnelle : on crée un formulaire pour créer une unité, un formulaire pour une famille etc, et dans article tu ne fais QUE sélectionner.
    - la méthode qui se rapproche de ce que tu veux : une selectbox et un champ supplémentaire pour dire "Autre" qui afficherait un champ texte dans lequel tu rajouterais l'unité ou la famille de ton choix
    - la deuxième méthode qui se rapproche de ce que tu veux ! un champ texte avec autocomplétion sur ce qui existe déja : si le champ existe, alors on traite le formulaire pour faire le lien, si ce que tu viens de taper n'existe pas, alors on crée une nouvelle entrée. Mais cela signifie aussi que ton champ d'autocomplétion doit te retourner des résultats sans doublon.

    ++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 125
    Par défaut
    +1 Nico

    Et surement tes méthodes ne correspondent pas a un objet mais a une variable d'où le problème tostring que tu reçois

Discussions similaires

  1. Utilisation de Forms avec Oracle XE (licence)
    Par tostinni dans le forum Forms
    Réponses: 5
    Dernier message: 02/03/2009, 17h59
  2. probleme d'utilisation d api c dans des controle forms avec wpf
    Par ZashOne dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 24/07/2007, 12h04
  3. Réponses: 12
    Dernier message: 22/02/2007, 23h38
  4. Utiliser mySmartUpload.Form("Toto") avec aspSmartU
    Par PrinceMaster77 dans le forum ASP
    Réponses: 8
    Dernier message: 15/02/2005, 13h53
  5. [FORMS] Utilisation de DLL avec ORA_FFI
    Par Nounoursonne dans le forum Forms
    Réponses: 2
    Dernier message: 07/12/2004, 09h19

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