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 :

Formulaires et array_key_exists() [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 119
    Par défaut Formulaires et array_key_exists()
    Bonjour, voila j'ai rencontré un problème lorsque je test mon formulaire d'inscription. Au début j'avais oublier de mettre 'Id' en tant que clé primaire, et je me suis retrouvé avec cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: array_key_exists() [function.array-key-exists]: The first argument should be either a string or an integer in \symfony\lib\util\sfParameterHolder.class.php on line 53
    J'ai cru comprendre qu'il manquait le champ Id. J'ai donc mis à jour ma base de données. J'ai lancé les commande symfony nécessaires pour régénérer schema, model....

    Mais voila j'ai toujours ce problème. Comment y remédier ?

    Voici l'implémentation de la methode configure dans la class MembresForms.Class.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
     
     protected static $Civilites = array('Mademoiselle', 'Madame', 'Monsieur');
     
      public function configure()
      {
         unset(
            $this["Role"], $this["IpInscription"], $this["Id"],
            $this["DateInscription"], $this["Etat"]);
     
     
          $this->setWidgets(array(
              'Login' => new sfWidgetFormInput(),
              'Email' => new sfWidgetFormInput(),
              'Pass' => new sfWidgetFormInput(),
              'Repass' => new sfWidgetFormInput(),
              'Nom' => new sfWidgetFormInput(),
              'Prenom' => new sfWidgetFormInput(),
              'Civilite' => new sfWidgetFormSelect(array('choices' => self::$Civilites)),
              'Telephone' => new sfWidgetFormInput(),
              'Adresse' => new sfWidgetFormInput(),
              'Complement' => new sfWidgetFormInput(),
              'CodePostal' => new sfWidgetFormInput(),
              'Ville' => new sfWidgetFormInput(),
              'Photo' => new sfWidgetFormInputFile(),
              'Newsletter'=> new sfWidgetFormInputCheckbox(),
              'Captcha' => new sfWidgetFormInput(),
               'Parrain' => new sfWidgetFormInput()));
     
              $this->widgetSchema->setLabels(array(
                  'Login' => "Nom d'utilisateur*",
                  'Email' => "Adresse email*",
                  'Pass' => "Mot de passe*",
                  'Repass' => "Confirmer*",
                  'Nom' => "Nom*",
                  'Prenom' => "Prénom*",
                  'Civilite' => "Civilité*",
                  'Telephone' => "Téléphone*",
                  'Adresse' => "Adresse*",
                  'Complement' => "Adresse complémentaire",
                  'CodePostal' => "Code postal*",
                  'Ville' => "Ville*",
                  'Photo' => "Avatar",
                  'Newsletter'=> "Newsletter*",
                  'Captcha' => "Captcha",
                  'Parrain' => "Parrain"));
     
            $this->widgetSchema->setHelp('Login', "Nombre de caractères : Entre 6 et 32.");
            $this->widgetSchema->setHelp('Pass', "Veuillez saisir un mot de passe complexe. Nombre de caractères : Entre 6 et 16");
            $this->widgetSchema->setHelp('Repass', "Veuillez confirmer votre mot de passe en le réécrivant, opur prévenir d'une éventuelle erreurs.");
            $this->widgetSchema->setHelp("Email","Veuillez saisir une addrese email valide.");
            $this->widgetSchema->setHelp('Nom', "Nombre de caractères : Entre 2 et 50.");
            $this->widgetSchema->setHelp('Prenom',"Nombre de caractères : Entre 2 et 50.");
            $this->widgetSchema->setHelp('Civilite', "Veuillez séléctionner votre civilité dans la liste.");
            $this->widgetSchema->setHelp('Telephone', "Nombre de chiffres : 10.");
            $this->widgetSchema->setHelp('Adresse', "Nombre de caractères : Entre 2 et 50.");
            $this->widgetSchema->setHelp('Complément', "Nombre de caractères : Entre 2 et 50.");
            $this->widgetSchema->setHelp('CodePostal', "Nombre de caractères : 5.");
            $this->widgetSchema->setHelp('Ville', "Nombre de caractères : Entre 2 et 50.");
            $this->widgetSchema->setHelp('Photo', "Veuillez séléctionner une image sur votre ordinateur.");
            $this->widgetSchema->setHelp('Newsletter', "Veuillez cocher la case si vous souhaitez vous inscrire à la newsletter.");
            $this->widgetSchema->setHelp('Parrain', "Veuillez saisir le nom d'utilisateur de votre parrrain.");
     
            $this->validatorSchema->setPostValidator(
                new sfValidatorSchemaCompare('Pass',  sfValidatorSchemaCompare::EQUAL, 'Repass')
            );
     
            $this->setValidators(array(
              'Login' => new sfValidatorAnd(array(
                new sfValidatorString(array('required' => true, 'min_length' => 3, 'max_length' => 32)),
                new sfValidatorRegex(array('pattern' => '/^[a-zA-Z0-9-]+$/')))),
              'Email'=> new sfValidatorAnd(array(
                new sfValidatorString(array('required' => true, 'min_length' => 3, 'max_length' => 100)),
                new sfValidatorRegex(array('pattern' => '^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|coop|info|museum|name))$')))),
              'Pass'  => new sfValidatorString(array('required' => true, 'min_length' => 6, 'max_length' => 16)),
              'Repass' => new sfValidatorString(array('required' => true, 'min_length' => 6, 'max_length' => 16)) ,
              'Nom' => new sfValidatorString(array('required' => true, 'min_length' => 2, 'max_length' => 50)),
              'Prenom' => new sfValidatorString(array('required' => true, 'min_length' => 2, 'max_length' => 50)),
              'Telephone' => new sfValidatorAnd(array(
                new sfValidatorString(array('required' => true, 'min_length' => 10, 'max_length' => 10)),
                new sfValidatorRegex(array('pattern' => '/^(01|02|03|04|05|06|08)[0-9]{8}/')))),
              'Adresse' => new sfValidatorString(array('required' => true, 'min_length' => 2, 'max_length' => 50)),
              'Complement' => new sfValidatorString(array('required' => true, 'min_length' => 2, 'max_length' => 50)),
              'CodePostal' => new sfValidatorString(array('required' => true,'min_length' => 5, 'max_length' => 5)),
              'Ville' => new sfValidatorString(array('required' => true, 'min_length' => 2, 'max_length' => 50))));
     
        }
    Personnalisent je pense que l'erreur vient du model, voici un extrait du schéma :

    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
    Membres:
      connection: doctrine
      tableName: membres
      columns:
        parrain:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        id:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: true
          autoincrement: true
        login:
          type: string(32)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        pass:
          type: string(32)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        email:
          type: string(100)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        nom:
          type: string(50)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        prenom:
          type: string(50)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        civilite:
          type: string(20)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        telephone:
          type: string(10)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        adresse:
          type: string(50)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        complement:
          type: string(50)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        code_postal:
          type: string(5)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        ville:
          type: string(50)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        photo:
          type: string(200)
          fixed: false
          unsigned: false
          primary: false
          default: ''
          notnull: false
          autoincrement: false
        role:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        newsletter:
          type: integer(1)
          fixed: false
          unsigned: false
          primary: false
          notnull: false
          autoincrement: false
        ipinscription:
          type: string(30)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        dateinscription:
          type: date(25)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
        etat:
          type: integer(4)
          fixed: false
          unsigned: false
          primary: false
          notnull: true
          autoincrement: false
    Donc voila si vous trouvez quelque chose qui vous semble faux n'hésitez pas à me le signaler. Merci

    Cordialement

  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 : 63
    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
    Citation Envoyé par toham Voir le message
    J'ai cru comprendre qu'il manquait le champ Id. J'ai donc mis à jour ma base de données. J'ai lancé les commande symfony nécessaires pour régénérer schema, model....
    Je pense que tu tiens ton erreur.

    Quant tu dis cela, as-tu régénéré totalement la base (doctrine:build --all) ?

    Si non, essaye.

    A part cela et un schéma trop verbeux le tous me semble fonctionnel.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 119
    Par défaut
    Citation Envoyé par mimi68 Voir le message
    Je pense que tu tiens ton erreur.

    Quant tu dis cela, as-tu régénéré totalement la base (doctrine:build --all) ?

    Si non, essaye.

    A part cela et un schéma trop verbeux le tous me semble fonctionnel.
    Ba cette commande ne marche pas chez moi ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Task "doctrine:build-all" is not defined.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 29
    Par défaut
    Salut,
    alors, j'ai le même soucis que toi, même erreure.
    Et je n'ai pas la solution mais

    la commande est
    symfony doctrine:build --all

    avec un espace et deux tirets devant all
    Et chez moi cela ne marche pas (la commande marche, mais cela change rien avec le formulaire)



    Pour si jamais il y a une correlation dans ton erreur et la mienne, voici mon schema. (Ce sera p-e plus facile de trouver chez l'autre que chez soi mê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
    News:
      columns:
        id:
          type: integer
          primary: true
        membre_id:
          type: integer
          primary: true
        titre:
          type: string(255)
        message:
          type: string()
        date:
          type: timestamp
        image:
          type: string()
        site:
          type: integer
      relations:
        Membre:
          foreignAlias: auteur
     
    Post:
      columns:
        id:
          type: integer
          primary: true
        news_id:
          type: integer
          primary: true
        membre_id:
          type: integer
          primary: true
        message:
          type: string()
        date:
          type: timestamp
     
     
      relations:
        News:
          foreignAlias: NewsPostMembre
        Membre:
          foreignAlias: NewsPostMembre
     
    Membre:
      columns:
        id:
          type: integer
          primary: true
        sf_Guard_User_id:
          type: integer
     
      relations:
        sfGuardUser:
          foreignType: one

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2008
    Messages : 119
    Par défaut
    Bon, mon problème s'est résolu de lui-même, en fait j'ai continué de travailler et j'ai mis cette erreur de coté, et entre-temps cette erreur à disparu.... et je ne sais pas ce que j'ai pu faire arranger mon problème, désolé.

    Par contre j'ai une autre erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: preg_match() [function.preg-match]: No ending delimiter '^' found in E:\Production\lib\vendor\symfony\lib\validator\sfValidatorRegex.class.php on line 52
    Je pense que l'erreur vient de mes expressions régulières. Un problème avec les '^'. Voici les validators en questions :

    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
     $this->setValidators(array(
              'Login' => new sfValidatorAnd(array(
                new sfValidatorString(array('required' => true, 'min_length' => 3, 'max_length' => 32)),
                new sfValidatorRegex(array('pattern' => '/^[a-zA-Z0-9-]+$/')))),
              'Email'=> new sfValidatorAnd(array(
                new sfValidatorString(array('required' => true, 'min_length' => 3, 'max_length' => 100)),
                new sfValidatorRegex(array('pattern' => '^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|coop|info|museum|name))$')))),
              'Pass'  => new sfValidatorString(array('required' => true, 'min_length' => 6, 'max_length' => 16)),
              'Repass' => new sfValidatorString(array('required' => true, 'min_length' => 6, 'max_length' => 16)) ,
              'Nom' => new sfValidatorString(array('required' => true, 'min_length' => 2, 'max_length' => 50)),
              'Prenom' => new sfValidatorString(array('required' => true, 'min_length' => 2, 'max_length' => 50)),
              'Telephone' => new sfValidatorAnd(array(
                new sfValidatorString(array('required' => true, 'min_length' => 10, 'max_length' => 10)),
                new sfValidatorRegex(array('pattern' => '/^(01|02|03|04|05|06|08)[0-9]{8}/')))),
              'Adresse' => new sfValidatorString(array('required' => true, 'min_length' => 2, 'max_length' => 50)),
              'Complement' => new sfValidatorString(array('required' => true, 'min_length' => 2, 'max_length' => 50)),
              'CodePostal' => new sfValidatorString(array('required' => true,'min_length' => 5, 'max_length' => 5)),
              'Ville' => new sfValidatorString(array('required' => true, 'min_length' => 2, 'max_length' => 50))));

  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 : 63
    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
    @tohan, tu as dû, d'une manière ou d'une autre corriger. Tant mieux. Comme on dit en informatique, La théorie c'est quant tu sais pourquoi cela ne marche pas et la pratique c'est quant tu ne sais pas pourquoi cela marche, vive la pratique...

    Juste un truc, dans ton code, je n'avais pas vu hier, tu as, dans ton form une propriété
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected static $Civilites = array('Mademoiselle', 'Madame', 'Monsieur');
    Je la déplacerais dans le modèle Membres.class.php tu peux y accéder dans le form avec un Membes::Civilites et l'avantage c'est que tous ce qui est données reste dans les données.

    Autre choses, ta table membres s'appelle "membres" et donc ta classe s'appelle "membres" aussi. Hors, un objet représente un seul membre je te recommande donc, dans les shema.yml il convient de mettre tous les nom de tables au singulier (et si le nom au singulier fini par un "s", d'en changer). Tu peux garder le nom physique de la table au pluriel, ceci n'interfère pas. Seul les nom de liens qui retournent plusieurs enregistrement (le côté n d'une relation) seront au pluriels, justement pour savoir qu'ils renvoient plusieurs enregistrement.

    Pour le nouveau problème, regarde ton validateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sfValidatorRegex(array('pattern' => '/^(01|02|03|04|05|06|08)[0-9]{8}/'))
    a priori j'aurais mis '/^0[1-8][0-9]{8}/' reste que ce type de validation exclu les numéros étranger et les numéros de plus de 10 chiffres que l'on peut rencontrer sur certain standard. Et il y a des numéros qui commence en 09 si mes souvenirs sont bon, sans oublier les numéro cours en 32xx. Je ne suis pas sur qu'un validateur sur les téléphones soit réellement envisageable, sauf à interdire caractères.



    @movrack
    Je ne sais pas ce que tu n'arrives pas à créer ni dans quel formulaire, le seul shema.yml est un peu "léger" pour cela. Par contre, il est un peu effrayant et va te coincer méchamment plus ou moins rapidement.
    1) tes clefs primaires sont mal définies, elle englobent trop de champs. Exemple dans la table News: tu as une clef primaire composée de l'id de la news et de l'id du membre. Hors, normalement, l'id de la news devrait être unique et ce suffire en tant que clef. Et si l'id était unique pour chaque news, la liaison mise en place uniquement sur l'id ne pourrait marcher. Sans compter que le foreignAlias de ta liaison est hors sujet et non contextuel.

    En plus tu utilise une table Membre qui fait juste une liaison sur la table sfGuardUser, sans lui apporter aucun contenu, ce qui ne présente aucun intérêt.

    Le shema.yml revu :
    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
     
    New:
      actAs:
        timestampable: 
      columns:
        membre_id: integer(4)
        titre: string(255)
        message: clob
        image: string()
        site: integer
      relations:
        auteur:
          class: sfGuardUser:    
          local: member_id
          foreign: id
          foreignAlias: News
     
    Post:
      actAs:
        timestampable: ~
      columns:
        news_id:  integer
        membre_id: integer(4)
        message: clob
      relations:
        New:
          foreignAlias: Posts
        Auteur:
          class: sfGuardUser
          local: membre_id
          foreign: id
          foreignAlias: Posts
    • une table sans clef primaire déclare automatiquement un champ id (integer, priamry: true, autoincremant: true).
    • La liaison avec l'utilisateur doit être plus précises vu que le nom de la liaison est différentes du nom de la classe (d'où class) et que le nom du champs de liaison n'est pas le même que le nom de la class. A noter aussi que dans sfGuarUser, la clef est un integer(4) (integer est en fait integer(8).
    • suppression des clefs primaires composées inutiles.
    • les liaisons qui retournent plusieurs enregistrement ont un nom qui fini par "s" ce qui est plus simple à utiliser. Pour une nouvelle $new on va retrouver un tableau de tous les posts par $new->getPosts().

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 29
    Par défaut
    @mimi68
    Merci pour ta réponses, effectivement c'est pas malin cette histoire de clef et en effets, je me tirais les cheveux pour insérer des données à cause des ces clefs.

    Je vais un peu revoir tout mon schéma parce que je comprend que j'ai fait d'autres erreurs également.

    De plus quoi sert exactement ceci?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      actAs:
        timestampable: ~
    Pour la table Membre, je compte ajouter des informations dedans par la suite parce que j'ai "peur" de modifier la table du plugin sfGuardUser


    J'ajouterai le schéma lorsque que j'aurai terminer de le refaire à partir du tient.


    edit:
    Pour timestampable j'ai trouver la réponse ici:
    http://www.informathic.com/post/2010...-timestampable


    edit:

    Voilà, j'ai changer mon schéma. Actuellement, il ressemble à ça:
    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
    Membre:
      inheritance:
        type: column_aggregation
        extends: sfGuardUser
      columns:
        maColonne: integer
     
    Nouvelle:
      actAs:
        timestampable: ~
      columns:
        membre_id:
          type: integer
        titre: string(255)
        message: clob
        image: string(255)
        site: string(20)
      relations:
        Auteur:
          class: Membre
          local: membre_id
          foreign: id
          foreignAlias: Nouvelles
          type: one
          foreignType: many
     
    Post:
      actAs:
        timestampable: ~
      columns:
        nouvelle_id: integer
        membre_id: integer
        message: clob
      relations:
        Nouvelle:
          class: Nouvelle
          local: nouvelle_id
          foreign: id
          foreignAlias: Posts
          type: one
          foreignType: many
        Auteur:
          class: Membre
          local: membre_id
          foreign: id
          foreignAlias: Posts
          type: one
          foreignType: many
    Je teste de ce pas le formulaire pour en créé un nouveau ^^

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 29
    Par défaut
    J'ai essayer de créé un module généré avec doctrine et j'ai le message d'erreur suivant.
    A quoi c 'est du ?

    Pour info, j'ai vider le cache et fait doctrine:clean également...

    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
    symfony doctrine:generate-module --with-show --non-verbose-templates saga nouvelles Nouvelle
    PHP Fatal error:  Class 'Doctrine_Template_timestampable' not found in /var/www/sagaDev/lib/model/doctrine/base/BaseNouvelle.class.php on line 72
    PHP Stack trace:
    PHP   1. {main}() /usr/bin/symfony:0
    PHP   2. include() /usr/bin/symfony:37
    PHP   3. sfSymfonyCommandApplication->run() /var/www/sagaDev/lib/vendor/symfony/command/cli.php:20
    PHP   4. sfTask->runFromCLI() /var/www/sagaDev/lib/vendor/symfony/command/sfSymfonyCommandApplication.class.php:76
    PHP   5. sfBaseTask->doRun() /var/www/sagaDev/lib/vendor/symfony/task/sfTask.class.php:97
    PHP   6. sfDoctrineGenerateModuleTask->execute() /var/www/sagaDev/lib/vendor/symfony/task/sfBaseTask.class.php:68
    PHP   7. sfDoctrineGenerateModuleTask->executeGenerate() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/task/sfDoctrineGenerateModuleTask.class.php:98
    PHP   8. sfGeneratorManager->generate() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/task/sfDoctrineGenerateModuleTask.class.php:117
    PHP   9. sfModelGenerator->generate() /var/www/sagaDev/lib/vendor/symfony/generator/sfGeneratorManager.class.php:113
    PHP  10. sfDoctrineGenerator->configure() /var/www/sagaDev/lib/vendor/symfony/generator/sfModelGenerator.class.php:56
    PHP  11. Doctrine_Core::getTable() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/generator/sfDoctrineGenerator.class.php:41
    PHP  12. Doctrine_Connection->getTable() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Core.php:1095
    PHP  13. Doctrine_Table->__construct() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1123
    PHP  14. BaseNouvelle->setUp() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Table.php:260
     
    Fatal error: Class 'Doctrine_Template_timestampable' not found in /var/www/sagaDev/lib/model/doctrine/base/BaseNouvelle.class.php on line 72
     
    Call Stack:
        0.0021     328092   1. {main}() /usr/bin/symfony:0
        0.0134     585220   2. include('/var/www/sagaDev/lib/vendor/symfony/command/cli.php') /usr/bin/symfony:37
        0.1869    6722348   3. sfSymfonyCommandApplication->run() /var/www/sagaDev/lib/vendor/symfony/command/cli.php:20
        0.1950    6725728   4. sfTask->runFromCLI() /var/www/sagaDev/lib/vendor/symfony/command/sfSymfonyCommandApplication.class.php:76
        0.1955    6726704   5. sfBaseTask->doRun() /var/www/sagaDev/lib/vendor/symfony/task/sfTask.class.php:97
        0.2129    7362244   6. sfDoctrineGenerateModuleTask->execute() /var/www/sagaDev/lib/vendor/symfony/task/sfBaseTask.class.php:68
        0.2226    8129492   7. sfDoctrineGenerateModuleTask->executeGenerate() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/task/sfDoctrineGenerateModuleTask.class.php:98
        0.2231    8151132   8. sfGeneratorManager->generate() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/task/sfDoctrineGenerateModuleTask.class.php:117
        0.2255    8379380   9. sfModelGenerator->generate() /var/www/sagaDev/lib/vendor/symfony/generator/sfGeneratorManager.class.php:113
        0.2343    9289360  10. sfDoctrineGenerator->configure() /var/www/sagaDev/lib/vendor/symfony/generator/sfModelGenerator.class.php:56
        0.2343    9289360  11. Doctrine_Core::getTable() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/generator/sfDoctrineGenerator.class.php:41
        0.2344    9289360  12. Doctrine_Connection->getTable() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Core.php:1095
        0.2410    9914948  13. Doctrine_Table->__construct() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1123
        0.2452   10115432  14. BaseNouvelle->setUp() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Table.php:260
     
     
    Variables in local scope (#14):
      $timestampable0 = *uninitialized*
     
    PHP Fatal error:  Call to a member function evictAll() on a non-object in /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1239
    PHP Stack trace:
    PHP   1. {main}() /usr/bin/symfony:0
    PHP   2. include() /usr/bin/symfony:37
    PHP   3. sfSymfonyCommandApplication->run() /var/www/sagaDev/lib/vendor/symfony/command/cli.php:20
    PHP   4. sfTask->runFromCLI() /var/www/sagaDev/lib/vendor/symfony/command/sfSymfonyCommandApplication.class.php:76
    PHP   5. sfBaseTask->doRun() /var/www/sagaDev/lib/vendor/symfony/task/sfTask.class.php:97
    PHP   6. sfDoctrineGenerateModuleTask->execute() /var/www/sagaDev/lib/vendor/symfony/task/sfBaseTask.class.php:68
    PHP   7. sfDoctrineGenerateModuleTask->executeGenerate() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/task/sfDoctrineGenerateModuleTask.class.php:98
    PHP   8. sfGeneratorManager->generate() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/task/sfDoctrineGenerateModuleTask.class.php:117
    PHP   9. sfModelGenerator->generate() /var/www/sagaDev/lib/vendor/symfony/generator/sfGeneratorManager.class.php:113
    PHP  10. sfDoctrineGenerator->configure() /var/www/sagaDev/lib/vendor/symfony/generator/sfModelGenerator.class.php:56
    PHP  11. Doctrine_Core::getTable() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/generator/sfDoctrineGenerator.class.php:41
    PHP  12. Doctrine_Connection->getTable() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Core.php:1095
    PHP  13. Doctrine_Table->__construct() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1123
    PHP  14. BaseNouvelle->setUp() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Table.php:260
    PHP  15. sfDatabaseManager->shutdown() /var/www/sagaDev/lib/vendor/symfony/database/sfDatabaseManager.class.php:0
    PHP  16. sfDoctrineDatabase->shutdown() /var/www/sagaDev/lib/vendor/symfony/database/sfDatabaseManager.class.php:134
    PHP  17. Doctrine_Manager->closeConnection() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/database/sfDoctrineDatabase.class.php:165
    PHP  18. Doctrine_Connection->close() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Manager.php:579
    PHP  19. Doctrine_Connection->clear() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1268
     
    Fatal error: Call to a member function evictAll() on a non-object in /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1239
     
    Call Stack:
        0.0021     328092   1. {main}() /usr/bin/symfony:0
        0.0134     585220   2. include('/var/www/sagaDev/lib/vendor/symfony/command/cli.php') /usr/bin/symfony:37
        0.1869    6722348   3. sfSymfonyCommandApplication->run() /var/www/sagaDev/lib/vendor/symfony/command/cli.php:20
        0.1950    6725728   4. sfTask->runFromCLI() /var/www/sagaDev/lib/vendor/symfony/command/sfSymfonyCommandApplication.class.php:76
        0.1955    6726704   5. sfBaseTask->doRun() /var/www/sagaDev/lib/vendor/symfony/task/sfTask.class.php:97
        0.2129    7362244   6. sfDoctrineGenerateModuleTask->execute() /var/www/sagaDev/lib/vendor/symfony/task/sfBaseTask.class.php:68
        0.2226    8129492   7. sfDoctrineGenerateModuleTask->executeGenerate() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/task/sfDoctrineGenerateModuleTask.class.php:98
        0.2231    8151132   8. sfGeneratorManager->generate() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/task/sfDoctrineGenerateModuleTask.class.php:117
        0.2255    8379380   9. sfModelGenerator->generate() /var/www/sagaDev/lib/vendor/symfony/generator/sfGeneratorManager.class.php:113
        0.2343    9289360  10. sfDoctrineGenerator->configure() /var/www/sagaDev/lib/vendor/symfony/generator/sfModelGenerator.class.php:56
        0.2343    9289360  11. Doctrine_Core::getTable() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/generator/sfDoctrineGenerator.class.php:41
        0.2344    9289360  12. Doctrine_Connection->getTable() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Core.php:1095
        0.2410    9914948  13. Doctrine_Table->__construct() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1123
        0.2452   10115432  14. BaseNouvelle->setUp() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Table.php:260
        0.3770   10803932  15. sfDatabaseManager->shutdown() /var/www/sagaDev/lib/vendor/symfony/database/sfDatabaseManager.class.php:0
        0.3770   10803932  16. sfDoctrineDatabase->shutdown() /var/www/sagaDev/lib/vendor/symfony/database/sfDatabaseManager.class.php:134
        0.3770   10803932  17. Doctrine_Manager->closeConnection() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/database/sfDoctrineDatabase.class.php:165
        0.3770   10803932  18. Doctrine_Connection->close() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Manager.php:579
        0.3778   10857496  19. Doctrine_Connection->clear() /var/www/sagaDev/lib/vendor/symfony/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php:1268
     
     
    Variables in local scope (#19):
      $k = 'Nouvelle'
      $table = class NouvelleTable { protected $_data = array (); protected $_identifier = 'id'; protected $_identifierType = 1; protected $_conn = class Doctrine_Connection_Mysql { protected $driverName = 'Mysql'; protected $dbh = NULL; protected $tables = array (...); protected $_name = 'doctrine'; protected $isConnected = FALSE; protected $supported = array (...); protected $pendingAttributes = array (...); private ${Doctrine_Connection}:modules = array (...); protected $properties = array (...); protected $serverInfo = array (...); protected $options = array (...); protected $_count = 0; protected $_usedNames = array (...); protected $attributes = array (...); protected $parent = class Doctrine_Manager { ... }; protected $_impl = array (...); protected $_params = array (...); protected $_locator = NULL; protected $_resources = array (...) }; protected $_identityMap = array (); protected $_repository = NULL; protected $_columns = array ('id' => array (...), 'membre_id' => array (...), 'titre' => array (...), 'message' => array (...), 'image' => array (...), 'site' => array (...)); protected $_uniques = array (); protected $_fieldNames = array ('id' => 'id', 'membre_id' => 'membre_id', 'titre' => 'titre', 'message' => 'message', 'image' => 'image', 'site' => 'site'); protected $_columnNames = array ('id' => 'id', 'membre_id' => 'membre_id', 'titre' => 'titre', 'message' => 'message', 'image' => 'image', 'site' => 'site'); protected $columnCount = 6; protected $hasDefaultValues = NULL; protected $_options = array ('name' => 'Nouvelle', 'tableName' => 'nouvelle', 'sequenceName' => NULL, 'inheritanceMap' => array (...), 'enumMap' => array (...), 'type' => NULL, 'charset' => NULL, 'collate' => NULL, 'treeImpl' => NULL, 'treeOptions' => array (...), 'indexes' => array (...), 'parents' => array (...), 'joinedParents' => array (...), 'queryParts' => array (...), 'versioning' => NULL, 'subclasses' => array (...), 'orderBy' => NULL, 'declaringClass' => class ReflectionClass { ... }); protected $_tree = NULL; protected $_parser = class Doctrine_Relation_Parser { protected $_table = ...; protected $_relations = array (...); protected $_pending = array (...) }; protected $_templates = array (); protected $_filters = array (); protected $_generators = array (); protected $_generator = NULL; protected $_invokedMethods = array (); protected $record = class Nouvelle { protected $_node = NULL; protected $_id = array (...); protected $_data = array (...); protected $_values = array (...); protected $_state = 3; protected $_lastModified = array (...); protected $_modified = array (...); protected $_oldValues = array (...); protected $_errorStack = NULL; protected $_references = array (...); protected $_pendingDeletes = array (...); protected $_pendingUnlinks = array (...); protected $_serializeReferences = FALSE; protected $_invokedSaveHooks = FALSE; private ${Doctrine_Record}:_oid = 1; protected $_table = ...; protected $_locator = NULL; protected $_resources = array (...) }; protected $attributes = array (); protected $parent = class Doctrine_Connection_Mysql { protected $driverName = 'Mysql'; protected $dbh = NULL; protected $tables = array (...); protected $_name = 'doctrine'; protected $isConnected = FALSE; protected $supported = array (...); protected $pendingAttributes = array (...); private ${Doctrine_Connection}:modules = array (...); protected $properties = array (...); protected $serverInfo = array (...); protected $options = array (...); protected $_count = 0; protected $_usedNames = array (...); protected $attributes = array (...); protected $parent = class Doctrine_Manager { ... }; protected $_impl = array (...); protected $_params = array (...); protected $_locator = NULL; protected $_resources = array (...) }; protected $_impl = array (); protected $_params = array (); protected $_locator = NULL; protected $_resources = array () }


    edit: J4ai été chercher les template dans sfDoctrinePlugin.
    Maintenant, cela fonctionne.

    Merci pour tout

  9. #9
    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 : 63
    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
    Pour ton long message d'erreur, je n'ai jamais vu un message d'erreur pareil lors de la génération d'un module... Et je ne vois pas comment les templates du sfDoctrinePlugin peuvent solutionner le problème. Je suis curieux.

    Pour le schéma, ta solution est une des deux, a toi de voir, si cela te convient, c'est la bonne solution. Dans les relations 1-n, il n'est pas nécessaire de préciser le type pour l'un où l'autre côté, c'est la valeur par défaut. Pour la relation dans la table post vers nouvelle, il n'est pas nécessaire d'être aussi verbeux, seul foreignAlias est nécessaire.

    "Pourquoi faire court et simple alors que l'on peut faire long et compliqué ?" demandait le sage informaticien au jeune sorti de la masse et destiné à le remplacer... Et le jeune décida de toujours faire simple et court plutôt que long et compliqué. C'est ainsi qu'il devint sage et remplaça sont vieux gourou.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création d'un formulaire sous flash?
    Par ultrakas dans le forum Flash
    Réponses: 5
    Dernier message: 11/01/2005, 19h33
  2. [CR][Access] intégrer un viewer dans un formulaire access
    Par nicolak dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 13/01/2003, 16h52
  3. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 10h59
  4. [VB6][Formulaire]Appliquer un Scrollbar a une Form
    Par Boil dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/11/2002, 04h51
  5. [CR] Tranfert de formulaire a travers une page HTMl
    Par LIEU dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 12/09/2002, 09h37

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