2011-03-16 2 views
1

Je suis nouveau sur Symfony et je n'arrive même pas à créer des modèles valides.Symfony: erreur lors de la création de modèles

J'ai créé mon projet - qui utilisent Propel - et a écrit le schema.yml suivant:

propel: 
    poc: 
    id:   ~ 
    message:  { type: varchar(140), required: true} 
    author:  { type: varchar(255), required: true} 
    plus:   { type: integer, default: 0} 
    minus:  { type: integer, default: 0} 
    created_at: ~ 

J'exécuté les commandes suivantes sans erreurs:

$ php symfony propel:build --sql 
$ php symfony propel:insert-sql 
$ php symfony propel:build --model 

Mais lorsque je tente de charger fixtures ou générer un module, j'obtiens cette erreur:

La constante de classe PEER est d Éfini deux fois dans le BasePoc.php, mais pourquoi?

J'ai googlé et recréé le projet plusieurs fois, mais je ne pouvais pas voir mon erreur.

+1

Parfois, symfony peut être un peu confondu avec les classes de base. Essayez de supprimer le répertoire complet dans lequel résident tous les fichiers du modèle de base (attention à ne pas supprimer les fichiers que * vous * avez modifiés). Ces fichiers de base sont générés à chaque fois que vous créez le modèle. Si cela ne fonctionne pas, j'essaierais de localiser où la constante de classe 'PEER' est définie et de vérifier que vous ne l'avez pas accidentellement ajouté à une classe. –

Répondre

3

Si vous utilisez la nouvelle sfPropelORMPlugin au lieu du sfPropelPlugin livré avec symfony, il suffit de lire le fichier README sur le plugin, il vous manque la dernière étape:

Change the path of the symfony behaviors in the config/propel.ini file of your project:

[ini] 
propel.behavior.symfony.class     = plugins.sfPropelORMPlugin.lib.behavior.SfPropelBehaviorSymfony 
propel.behavior.symfony_i18n.class    = plugins.sfPropelORMPlugin.lib.behavior.SfPropelBehaviorI18n 
propel.behavior.symfony_i18n_translation.class = plugins.sfPropelORMPlugin.lib.behavior.SfPropelBehaviorI18nTranslation 
propel.behavior.symfony_behaviors.class  = plugins.sfPropelORMPlugin.lib.behavior.SfPropelBehaviorSymfonyBehaviors 
propel.behavior.symfony_timestampable.class = plugins.sfPropelORMPlugin.lib.behavior.SfPropelBehaviorTimestampable 

Remarque: un "remplacement en masse" rapide sur le fichier est suffisant. Note 2: Si vous utilisez sfPropel15Plugin, veuillez passer à sfPropelORMPlugin.

espérons que cela aide!

+0

merci pour cela, été mis à jour beaucoup de vieux projets propulsés dernièrement et doit avoir raté ça! – Burgi

+0

Pour ceux qui souhaitent démarrer de nouveaux projets avec symfony 1.4 + sfPropelORMPlugin, il existe un petit script bash qui vise à automatiser ce processus. [Regardez ici] (https://github.com/mppfiles/symfony1-boilerplate). – mppfiles

-1

Il semble que propel ne peut pas rendre le fichier entier. (propel a très bas rapport d'erreur, yaml) Assurez-vous de vérifier qu'il n'y a pas d'onglets dans votre fichier et que tout est identifié avec 2 espaces.

Le reste de la semble bien pour moi. Personnellement, je préfère l'aide de la doctrine, (vous devriez juste mettre le paramètre created_at dans un comportement ACTAS)

proc: 
    actAs: Timestampable: ~ 
    columns: 
    id:   ~ 
    message:  { type: varchar(140), required: true} 
    author:  { type: varchar(255), required: true} 
    plus:   { type: integer, default: 0} 
    minus:  { type: integer, default: 0} 
+0

Il utilise propel, vous avez donné un schéma de doctrine. – Maerlyn

+0

J'ai eu l'erreur avec Propel 1.5.6, en utilisant Propel 1.4.x résolu le problème (sans rien changer dans le schema.yml). –

Questions connexes