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 ?