[Doctrine] No yml schema found in schema.yml

Petit nouveau ! | 6 Messages

12 sept. 2010, 19:16

Bonjour, je tente d'utiliser Doctrine (sans symfony pour commencer) sous Windows 7 avec Wamp server.

quand j'essai de générer un modèle d'après un fichier yaml j'btiens l'erreur "No yml schema found in schema.yml". Pourtant j'ai copié exactement les données d'un tutoriel (http://www.sylvainartois.fr.nf/fr/PHP/D ... _en_oeuvre).

J'ai bien activé php_pdo_mysql.

Petit nouveau ! | 6 Messages

13 sept. 2010, 20:20

Voici mon YAML à titre d'info :

Code : Tout sélectionner

options: type: INNODB collate: utf8_unicode_ci charset: utf8 User: actAs: SoftDelete: Timestampable: created: name: account_birthday type: date format: Y-m-d updated: disabled: true columns: id: type: integer(4) primary: true autoincrement: true username: type: string(255) notnull : true password: type: string(255) notnull : true country: type: enum length: 2 values: ['EN', 'FR'] is_active: type: boolean default: false rate: type : float avatar: type: blob birthday: type: date relations: Groups: class: Group local: user_id foreign: group_id refClass: UserHasGroup Group: # Group est un mot réservé, on applique un setter sur le nom de la table tableName: group_table columns: id: type: integer(4) primary: true autoincrement: true name: type: string(255) relations: Users: class: User local: group_id foreign: user_id refClass: UserHasGroup UserHasGroup: columns: user_id: type: integer(4) primary: true group_id: type: integer(4) primary: true Profil: actAs: Timestampable: I18n: fields: [title,body] columns: id: type: integer(4) primary: true autoincrement: true title: type: string(255) body: type: clob user_id: type: integer(4) relations: User: local: user_id foreign: id foreignType: one Post: actAs: Timestampable: Sluggable: fields: [title] Searchable: fields: [title,body] listeners: [ PostListener ] columns: id: type: integer(4) primary: true autoincrement: true user_id: type: integer(4) lang: type: enum length: 2 values: ['EN', 'FR'] title: type: string(255) notnull : true body: type: string(4000) relations: User: foreignAlias: Posts

Mammouth du PHP | 19672 Messages

14 sept. 2010, 13:27

Es-tu bien certain que le code pointe vers le bon fichier ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 6 Messages

14 sept. 2010, 16:04

merci pour la réponse. je commençais à me sentir seul ^^.

voici mon code :

schema.yml est dans le répertoire 'models'

Code : Tout sélectionner

<?php require_once('Doctrine.php'); spl_autoload_register(array('Doctrine', 'autoload')); $sBDDname = 'doctrine_test'; $sBDDuser = 'root'; $sBDDpassword = ''; $oConn = Doctrine_Manager::connection( "mysql://$sBDDuser:$sBDDpassword@localhost/$sBDDname" ); $oDocManager = Doctrine_Manager::getInstance(); //activer le mode debug Doctrine_Core::debug( true ); $oConn->dropDatabase(); /* Voir toutes les options de generateModelsFromYaml */ $options = array( 'baseClassesDirectory' => 'BaseDir' ); //Le 2e argument, models, correpond à un dossier : votre_projet/models Doctrine_Core::generateModelsFromYaml( 'schema.yml', 'models', $options ); //On charge tout le modèle d'un coup $models = Doctrine_Core::loadModels('models', Doctrine_Core::MODEL_LOADING_AGGRESSIVE ); //debug, affichage du modèle chargé echo "<br/>loadModels : <br/><pre>"; print_r( $models ); echo "</pre>"; //idem, debug $models = Doctrine_Core::getLoadedModels(); echo "<br/>getLoadedModels : <br/><pre>"; print_r( $models ); echo "</pre>"; //finalement, on créé la BDD et les tables $oConn->createDatabase(); Doctrine_Core::createTablesFromModels('models'); ?>

Mammouth du PHP | 19672 Messages

14 sept. 2010, 16:18

Mouais, ça répond pas tellement à ma question : tu devrais jeter un coup d'oeil dans les logs d'accès Apache pour vérifier s'il n'y aurais pas une erreur 404 sur l'accès à ce fichier précisément et du coup tu verras où il le cherche.

En fait je soupçonne qu'il ne cherche pas là où tu l'as indiqué pour une raison qui m'échappe mais je n'ai pas trop le temps de plonger dans les détails de ton code.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 6 Messages

14 sept. 2010, 17:15

Pas d'erreur 404 dans le fichier d'Apache. Par contre on dirait en effet que le fichier n'est pas trouvé. QUand je bricole la fonction buildSchema de la classe Doctrine_Import_Schema pour loader uniquement mon fichier j'obtient :

Code : Tout sélectionner

loadModels : Array ( [BaseGroup] => BaseGroup [BasePost] => BasePost [BaseProfil] => BaseProfil [BaseUser] => BaseUser [BaseUserHasGroup] => BaseUserHasGroup [Group] => Group [Post] => Post [Profil] => Profil [User] => User [UserHasGroup] => UserHasGroup ) getLoadedModels : Array ( [0] => Group [1] => Post [2] => Profil [3] => User [4] => UserHasGroup ) Fatal error: Class 'PostListener' not found in C:\Web\wamp\www\Doctrine\models\BaseDir\BasePost.php on line 84

Petit nouveau ! | 6 Messages

14 sept. 2010, 17:22

(bon la classe PostListener je l'ai créer pour supprimer l'erreur)

Mammouth du PHP | 19672 Messages

14 sept. 2010, 17:27

(bon la classe PostListener je l'ai créer pour supprimer l'erreur)
Ok donc il manquait une classe : est-ce que ça a résolu le reste ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 6 Messages

14 sept. 2010, 17:32

Effectivement, on dirait que cette classe manquante a perturbé quelque chose.

J'ai enlevé mon hack de la fct buildSchema et ça tourne.

Ouf !

Mammouth du PHP | 19672 Messages

14 sept. 2010, 17:41

Good, il te reste juste à cliquer sur le bouton [Résolu] ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: