Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/09/2011, 20h50   #1
Nouveau Membre du Club
 
Inscription : septembre 2010
Messages : 62
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 62
Points : 37
Points : 37
Par défaut schema.yml ne fonctionne pas

hello

J'ai toujours un message d'erreur, disant qu'il arrive pas à parser mon yml, quand je tente de génrer mes requêtes SQL en ligne de commande...

Je pense que c'est un problème de format, peut-être que les espaces sous eclipse ça fout le truc en l'air... j'ai essayé avec geany qui reconnait le format yml mais ça plante aussi.

Je précise que j'essaie avec un copier collé d'un tutorial, qui est sensé fonctionner...

Any idea, un logiciel qui lirait ça bien sous ubuntu ou alors pensez vous qu'il y ait une autre cause?

EDIT: j'ai refait mon schema.yml à moi, et même en écrivant mon fichier en NANO dans la console linux, ça passe pas, ça bloque à la première ligne

Code :
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
 
 Member
    tableName: members
    actAs:
      timestampable: ~
    columns:
      username: string(15)
      genre:
        type: enum
        values: ['male', 'female']
      categorie:
        type: enum
        values: ['test', 'test2', 'test3']
      email: string(25)
      region: string(25)
      departement: string(25)
      isActivated: integer(1)
      password: string(60)
 
  Region
    tableName: regions
    actAs:
      timestampable: ~
    columns:
      region: string(50)
 
  Message
    tableName: messages
    actAs:
      timestampable: ~
    columns:
      senderId: integer
      receiverId: integer
      content: text
      isRead: integer(1)
 
  Departement
    tableName: departements
    actAs:
      timestampable: ~
    columns:
      departement: string(50)
 
  Commentaire
    tableName: commentaires
    actAs:
      timestampable: ~
    columns:
      senderId: integer
      receiverId: integer
      content: text
      isGood:
        type: enum
        values: ['truc', 'machin', 'test']
    relations:
      Member:
        type: one
        foreignType: many
        local: receiverId
        onDelete: CASCADE
zoreol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 01h45   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Je ne comprend pas trop le le problème. Tu dis : "il arrive pas à parser mon yml, quand je tente de génrer mes requêtes SQL en ligne de commande..."
Ce que je traduit par "lorsque je tente de créer la base de donnée".

A partir de là, il faut comprendre le problème de parse.

Tu dois avoir uniquement des espaces sur la gauche. Je te conseille de faire une indentation constante de deux espace. Le nom des tables doit être à la position zéro (pas d'espace avant).

Dans ton schema, tu as des "bizarreries" une table region avec un champ region ??? Rien qui puisse empêcher le parse du fichier, mais tu devrais repenser ton analyse.

Ton schema revu à ma façon :
Code :
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
#shema.yml (non testé)
Member
  tableName: members
  actAs:
    timestampable: ~
  columns:
    username: string(15)
    genre:
      type: enum
      values: ['male', 'female']
    categorie:
      type: enum
      values: ['test', 'test2', 'test3']
    email: string(25)
    region: string(25)
    departement: string(25)
    isActivated: integer(1)
    password: string(60)
 
Region
  tableName: regions
  actAs:
    timestampable: ~
    columns:
      nom: string(50)
 
Message
  tableName: messages
  actAs:
    timestampable: ~
  columns:
    sender_id: integer
    receiver_id: integer
    content: text
    isRead: integer(1)
 
Departement
  tableName: departements
  actAs:
    timestampable: ~
  columns:
    nom: string(50)
 
Commentaire
  tableName: commentaires
  actAs:
    timestampable: ~
  columns:
    sender_id: integer
    receiver_id: integer
    content: text
    isGood:
      type: enum
      values: ['truc', 'machin', 'test']
    relations:
      Member:
        local: receiver_id
        foreignAlias: Commentaires
Accessoirement, il faut éviter les champs enum. Si c'est viable pour un champ "genre" (mais à éviter) c'est déconseillé pour le moins pour un champ "categorie" qui est susceptible d'évoluer dans le temps.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/09/2011, 11h01   #3
Nouveau Membre du Club
 
Inscription : septembre 2010
Messages : 62
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 62
Points : 37
Points : 37
Merci bien pour ton aide.

En fait il manquait les deux points ":" devant les noms de table. Mais même après correction de ça ça plantait, je pense qu'il fallait aussi comme tu l'as fait enlever les espaces avant les noms de table.

C'est vrai que Region region ça faisait redondant, du coup là il me parse mon fichier jusqu'à la ligne 56, un problème avec la relation, là c'est pas un problème de syntaxe mais de logique je vais essayer de trouver ça, j'ai tellement peu l'habitude de toucher aux bases de données que j'ai du faire une bêtise.

Merci en tout cas
zoreol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 11h31   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Deux point après (!) le nom de table.

Et j'ai retapé le fichier sans le voir

Bon, vu l'heure, je m’absous.

En principe la relation tel que je l'ai écrite devrait être viable. Par contre, je dirais qu'il manque de nombreuses liaisons dans ton shema.yml

Attention, un bon schema.yml fait une application simple à développer. C'est une étape essentiel qu'il ne faut surtout pas négliger.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 12h03   #5
Nouveau Membre du Club
 
Inscription : septembre 2010
Messages : 62
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 62
Points : 37
Points : 37
Citation:
Envoyé par Michel Rotta Voir le message
Deux point après (!) le nom de table.

Et j'ai retapé le fichier sans le voir

Bon, vu l'heure, je m’absous.

En principe la relation tel que je l'ai écrite devrait être viable. Par contre, je dirais qu'il manque de nombreuses liaisons dans ton shema.yml

Attention, un bon schema.yml fait une application simple à développer. C'est une étape essentiel qu'il ne faut surtout pas négliger.
Ben écoute pareil pour moi, je galérais depuis hier soir, je crois que je les avais bien mis au début, et en les retapant dans nano je les ai zappé

Par contre j'ai un autre problème, j'ai ce message d'erreur en lançant la commande de creation des tables:

Fatal error: Call to a member function evictAll() on a non-object in /var/www/myProject/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php on line 1239

Pourtant là j'ai simplifié mon schema.yml au maximum juste pour le test:

Code :
1
2
3
4
5
6
7
8
9
10
 
 
Member:
  tableName: members
  columns:
    username: string(15)
    email: string(25)
    region: string(25)
    departement: string(25)
    password: string(60)
Les espaces sont bien respectés sur mon fichier, en fait je suis en mode "faire fonctionner symfony" plus qu'en mode projet là, mais quand je lancerai un projet tes conseils me seront bien utiles, merci pour ça
zoreol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 12h27   #6
Nouveau Membre du Club
 
Inscription : septembre 2010
Messages : 62
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 62
Points : 37
Points : 37
Il semblerait que ça bloque à ce niveau là, dans le fichier de doctrine Connection.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
/**
     * clear
     * clears all repositories
     *
     * @return void
     */
    public function clear()
    {
        foreach ($this->tables as $k => $table) {
            $table->getRepository()->evictAll();
            $table->clear();
        }
    }
Il semblerait que quelqu'un a eu le même problème, mais on a plus eu de nouvelles:

http://www.developpez.net/forums/d10...tion-evictall/
zoreol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2011, 13h54   #7
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Pour le coup, le problème est plus classique.

En général, il arrive lorsque l'on a apporté de grosses modifications sur un shema.yml notamment des suppressions d'entité (de table), ce qui est le cas ici, mais sans avoir épurer le modèle.

Dans les commandes en ligne, tu as une commande qui permet de nettoyer le modèle des classes devenues inutiles, pas de symfony1 sous la mains ce week-end, mais une recherche rapide sur la commande symfony devrait te permettre de trouver.

Nettoies ton modèle et régénère les tables, cela devrait marcher.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/09/2011, 18h24   #8
Nouveau Membre du Club
 
Inscription : septembre 2010
Messages : 62
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 62
Points : 37
Points : 37
Citation:
Envoyé par Michel Rotta Voir le message
Pour le coup, le problème est plus classique.

En général, il arrive lorsque l'on a apporté de grosses modifications sur un shema.yml notamment des suppressions d'entité (de table), ce qui est le cas ici, mais sans avoir épurer le modèle.

Dans les commandes en ligne, tu as une commande qui permet de nettoyer le modèle des classes devenues inutiles, pas de symfony1 sous la mains ce week-end, mais une recherche rapide sur la commande symfony devrait te permettre de trouver.

Nettoies ton modèle et régénère les tables, cela devrait marcher.
Merci de ton aide, bon tout fonctionne maintenant, j'aime beaucoup le système de doctrine (c'est mon premier ORM )
zoreol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2011, 15h51   #9
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Alors, pour ta prochaine application, je te conseil doctrine2 avec symfony2...

Une autre grosse découverte à venir !
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h17.


 
 
 
 
Partenaires

Hébergement Web