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 :

Système de messagerie privée


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Janvier 2009
    Messages : 38
    Par défaut Système de messagerie privée
    Bonjour, j'ai quelques questions pour mon système de messagerie privée au niveau des formulaires.
    Mon schema.yml :

    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
    ##################################### User #####################################
    Membre:
      inheritance:
        extends: sfGuardUser
        type:    simple
      columns:
        date_naissance: date
        lieu:           string(45)
        bio:            string()
      relations:
        Conversations:
          class:        ConversationPrivee
          local:        user_id
          foreign:      conversation_id
          refClass:     MembreConversationPrivee
          type:         many
        News:
          type:    many
          local:   id
          foreign: user_id
        CommentairesNews:
          class:   CommentaireNews
          type:    many
          local:   id
          foreign: user_id
    ################################## Messagerie ##################################
    ConversationPrivee:
      columns:
        id:
          type:          integer
          unsigned:      true
          primary:       true
          autoincrement: true
        sujet:
          type:    string(45)
          notnull: true
      relations:
        Participants:
          class:    Membre
          local:    conversation_id
          foreign:  user_id
          refClass: MembreConversationPrivee
          type:     many
        Messages:
          class:    MessagePrive
          local:    id
          foreign:  conversation_id
          type:     many
     
    MembreConversationPrivee:
      tableName: participant
      columns:
        user_id:         { type: integer, primary: true }
        conversation_id: { type: integer, unsigned: true, primary: true }
     
    MessagePrive:
      actAs:
        Timestampable: ~
      columns:
        id:
          type: integer
          unsigned: true
          primary: true
          autoincrement: true
        user_id:
          type: integer
        conversation_id:
          type: integer
          unsigned: true
          notnull: true
        message:
          type: string()
          notnull: true
      relations:
        ConversationPrivee:
          local:        conversation_id
          foreign:      id
          onDelete:     CASCADE
        Membre:
          local:        user_id
          foreign:      id
          onDelete:     SET NULL
    Je voudrais faire un formulaire de création d'une conversation, qui intègre aussi le formulaire de message privé (pour écrire le premier message de la conversation).
    J'ai donc utilisé mergeForm :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class ConversationPriveeForm extends BaseConversationPriveeForm
    {
      public function configure()
      {
        $this->setWidgets(array(
          'participants_list'    => new sfWidgetFormTextarea(array('label' => 'Liste des participants :'), array('rows' => 4, 'cols' => 15)),
          'sujet'                => new sfWidgetFormInputText(array('label' => 'Sujet :')),
        ));
        $this->validatorSchema['sujet'] = new sfValidatorString(array('max_length' => 150, 'min_length' => 3));
        $this->mergeForm(new MessagePriveForm());
      }
    }
    Donc en gros, on entre le sujet de la conversation, les pseudos des participants (dans un textarea, séparés ligne par ligne).

    Mon premier problème est que le textarea de la liste des participants contient le mot "Array" par défaut, comment rendre ce champ vide ? Et surtout, pourquoi est-il affiché Array ?

    Deuxième problème : comment faire un validateur pour ce champ ? Il devrait checker que chaque pseudo existe dans la base... Comment on utilise Doctrine dans les validateurs ?

  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
    Ton schéma présent quelques "bizarrerie", notamment au niveau de la définition de la liaison n-n avec MembreConversationPrivee comme pivot, j'ai des doutes sur la viabilité du schéma.

    Il n'est pas logique que ton textarea arrive avec "array" en texte au départ. Rien ne laisse entrevoir d'où cela peut venir dans ton code. Peut-être dans le template.

    J'ai des doutes sur l'utilisation d'un sfFormDoctrine merge sur deux table et outils de sauvegarde intégré (mais plus par manque de pratique que par preuve de non fonctionnement).

    Il te faudrait deux validateurs, un pour valider le fait d'avoir un nom par ligne, et un seul, et toujours un... Normalement un sfValidateorRegex devrait pouvoir le faire.

    Par contre pour aller chercher, l'un après l'autre, que les noms existent dans ta base, il n'y a pas de validateur (pour un nom, oui, pas dans un textearea). Il faudra donc l'écrire toi même.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Janvier 2009
    Messages : 38
    Par défaut
    Comment aurais-tu écrit la relation n-n ?
    J'ai regardé un peu dans les docs de doctrine, et j'ai trouvé cette solution... (http://www.doctrine-project.org/proj...s:many-to-many)
    Merci pour la réponse en tout cas.
    Pour le textarea qui contient Array, dans le template je fais juste ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $form['participants_list']->renderRow() ?>
    Donc je comprends vraiment pas... Y'a pas un moyen de le forcer à être vide ?

  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
    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
    # shema.yml (non testé)
    #################################### User #####################################
    Membre:
      inheritance:
        extends: sfGuardUser
        type:    simple
      columns:
        date_naissance: date
        lieu:           string(45)
        bio:            string()
      relations:
        Conversations:
          class:        ConversationPrivee
          refClass:     MembreConversationPrivee
          foreignAlias: Participants
        News: 
          type:    many # normalement ne devrait pas être précisé.
          local:   id
          foreign: user_id
          # il manque le foreignAlias (partout)
        CommentairesNews: 
          class:   CommentaireNews
          type:    many
          local:   id
          foreign: user_id
    ################################## Messagerie ##################################
    ConversationPrivee:
      columns:
        id:
          type:          integer
          unsigned:      true
          primary:       true
          autoincrement: true
        sujet:
          type:    string(45)
          notnull: true
      relations:
        Messages:
          class:    MessagePrive
          local:    id
          foreign:  conversation_id
          type:     many
     
    MembreConversationPrivee:
      tableName: participant
      columns:
        user_id:
          type: integer
          primary: true
        conversation_id: 
          type: integer
          unsigned: true
          primary: true
      relations:
        membre:
          local: user_id
          foreignAlias: MembreConversationPrivees
        ConversationPrivee:
          local: conversation_id
          foreignAlias: MembreConversationPrivees
          # foreign est id par défaut...
          # type est many to one par défaut...
     
    ...
    Par contre, je ne vois aucune raison pour que tu aies "array" dans ton form... Aurais-tu défini un defaut pour ce champ ?

  5. #5
    Membre averti
    Inscrit en
    Janvier 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Janvier 2009
    Messages : 38
    Par défaut
    Je ne sais même pas comment définir un défaut...
    J'ai juste dit que c'est un sfWidgetFormTextarea, rien de plus...

  6. #6
    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
    Non, définir une valeur par défaut dans ton configure ou dans le contrôleur (setDefault() ).

    Ou une valeur par défaut dans ton modèle peut-être....

    S'il écrit array, c'est que quelque part il considère qu'il y a array à écrire...

    Question annexe, quel est le type défini dans le modèle pour "participants_list" ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/05/2012, 19h49
  2. [Joomla!] Référencement sur composant de messagerie privée
    Par Mouna1983 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 10
    Dernier message: 25/09/2008, 17h04
  3. [Conception] Messagerie privée dans un espace membre
    Par elitemedia dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 11/09/2006, 16h29

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