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 :

aide formulaire symfony


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Par défaut aide formulaire symfony
    Bonjour,
    Dans symfony les formulaires sont souvent considérés comme un framework à part entière tellement ils peuvent être complexes.
    Je dois avouer que j'ai beaucoup de mal à les appréhender...

    Je sais que ce genre de post est très présent sur le forum mais je n'ai jamais réussi (pour le moment) à comprendre correctement et à appliquer à mon cas les réponses donnée.

    Voilà mon problème :

    Je travail sur un réseau social à la facebook et j'ai besoin qu'un utilisateur puisse envoyer un message privé à un autre utilisateur.

    Voici la structure de la bdd :

    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
     
    User:
      actAs: { Timestampable: ~ }
      connection: doctrine
      tableName: user
      columns:
        iduser:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        firstname:
          type: string(45)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        lastname:
          type: string(45)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        email:
          type: string(45)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        login:
          type: string(45)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        password:
          type: string(45)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
    Message:
      actAs: { Timestampable: ~ }
      connection: doctrine
      tableName: message
      columns:
        idmessage:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        sender:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        subject:
          type: string(45)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        content:
          type: string()
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
      relations:
        User:
          local: sender
          foreign: iduser
          type: one
        Receiver:
          local: idmessage
          foreign: idmessage
          type: many
    Receiver:
      connection: doctrine
      tableName: receiver
      columns:
        idreceiver:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        idmessage:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        iduser:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
      relations:
        Message:
          local: idmessage
          foreign: idmessage
          type: one
        User:
          local: iduser
          foreign: iduser
          type: one
    Donc j'ai créé un module "message", les formulaires de base fonctionnent très bien mais comme les destinataires d'un message sont stockés dans une table à part j'aimerai pouvoir rajouter un champ permettant d'en saisir plusieurs (je pense que pour l'exemple un seul suffira) et que une fois le formulaire est validé un message est créé ainsi qu'autant de destinataires que nécessaire.

    J'espère avoir été assez clair, n'hésitez pas à me demander de plus amples informations/explications.

    Merci d'avance de votre aide.

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Manifestement ton schéma est récupéré d'une base existante. Il est fortement recommandé de créer le schéma directement et de générer la base de donnée avec plutôt que le contraire. En effet, le shema.yml n'est pas uniquement la description de la base mais surtout celle des objets du modèle permettant de la gérer.

    Ton schéma revu à ma façon, une recherche dans le forum te donnera les explications nécessaire à comprendre les modifications.
    Code yaml : 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
    # shema.yml
    User:
      actAs: { Timestampable: ~ }
      tableName: user
      columns:
        first_name:
          type: string(45)
          notnull: true
        last_name:
          type: string(45)
          notnull: true
        email:
          type: string(200)
          notnull: true
        login:
          type: string(45)
          notnull: true
        password:
          type: string(45)
          notnull: true
     
    Message:
      actAs: { Timestampable: ~ }
      tableName: message
      columns:
        sender_id:
          type: integer
          notnull: true
        subject: string(45)
        content: cblob
      relations:
        Sender:
          class: User
          local: sender_id
          foreign: id
          foreignAlias: SendMessages
        Receivers:
          class: User
          refClass: Receiver
          foreignAlias: ReceiveMessages
     
    Receiver:
      tableName: receiver
      columns:
        user_id:
          type: integer
          primary: true
        message_id:
          type: integer
          primary: false
      relations:
        Message:
          foreignAlias: receivers
        User:
          foreignAlias: receivers
    Ce qui te donne deux tables (user et message) et ne liaison n-n entre elles sur receiver.

    Je ne suis pas sur que le fait de stocker les receivers dans une liaison soit une bonne idée, un champ destA devrait suffir dans le message, de plus des champs destC et destCC seraient un plus intéressant.

    A mon avis il faut dupliquer les messages reçu pour chaque destinataire (si non comment traiter les suppression partiel. Où alors créer une table de liaison n-n entre user et message pour qui à le message dans sa boite. Si le lien est effacer, on supprime cet enregistrement. Et si c'est le dernier n-n d'un message on supprime le message.


    Pour ta saisie, le plus simple, dans ta structure actuel (qu'il faut corriger) serait d'utiliser les méthodes de symfony de gestion des liaisons multiples par plusieurs boite, c'est automatiquement généré si ton schéma est correcte.

    Si non, il faut faire un form non relié à doctrine pour l'édition du message. Le retour et l'envoi des informations se faisant dans le contrôleur. Il faudra probablement écrire un validateur pour la vérification de l'adresse (des adresses) du(des) destinataire(s).

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Par défaut
    Merci pour cette réponse des plus complète!

    Cependant, la date limite de fin de développement (immuable) approche à grands pas et je pense ne pas avoir le temps pour repartir sur de meilleures bases.
    Ne me serait-il pas possible de m'en sortir avec un mergeForm, embedForm ou encore embedRelation?

    Encore une fois merci!

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Je ne sais pas ce que tu cherches réellement a faire, donc je ne peux donner une solution satisfaisante.

    Mes embedForm (pas mergeForm) sont une des possibilités, mais est-ce la bonne ?

    Avec une relation n-n bien définie, l'idéal est les doubles listes (sélectionné (lié) et non sélectionné). Mais ce n'est peut-être pas conforme à ton cahier des charges.

    Un mauvais modèle peut être une handicap dans le développement.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Par défaut
    Bon je vais récupérer la valeurs du champ destinataire à la validation du formulaire dans le action.class.php et remplir la table "à la main" ce sera plus simple pour ce projet vu le manque de temps.
    Mais je m'assurerai la prochaine fois d'avoir un model de bdd et un schéma nickel avant de commencer le développement.

    Encore un grand merci pour ton aide!

Discussions similaires

  1. [MySQL] Besoin d'aide formulaire devis express
    Par clubertonight dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 22/01/2009, 21h19
  2. Aide formulaire mail !
    Par mckilleron dans le forum Flash
    Réponses: 4
    Dernier message: 27/10/2008, 15h39
  3. Aide formulaire POST
    Par eliantis dans le forum Langage
    Réponses: 7
    Dernier message: 11/08/2006, 23h32
  4. [PHP-JS] A l'aide/Formulaire manquant
    Par kagura dans le forum Langage
    Réponses: 15
    Dernier message: 25/07/2006, 12h57
  5. aide formulaire et bouton radio
    Par jarod71 dans le forum IHM
    Réponses: 1
    Dernier message: 01/12/2005, 16h05

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