Perché non riesco a creare un model di Doctrine chiamato "Album"

Sto usando Doctrine come ORM nel mio progetto ma ho incontrato uno strano errore:

Utilizzando il seguente YAML:

Album: tableName: dpp_album actAs: [Timeprintingble] columns: name: string(255) description: string(255) online: boolean 

Genero quindi i miei templates, ma dopo aver aggiornato la mia pagina e caricato automaticamente i templates, PHP fornisce questo errore:

Errore irreversibile: class 'BaseAlbum' non trovata in E: \ sites \ dpp \ system \ application \ models \ Album.php on line 13

Stranamente tutti i miei altri templates stanno bene e le Classi Base si trovano in questi casi.

Quando si cambia il nome 'Album' in qualcosa come 'Set' funziona! Non è strano ?!

Quindi sembra che l'uso di "Album" sia in qualche modo in conflitto, anche se il messaggio di errore suggerisce qualcos'altro. Anche il cambio al plurale degli album non funziona, tutto il resto va bene!

Eventuali suggerimenti?

Grazie!

Se l'opzione generateBaseClasses è impostata (predefinita) generateModelsFromYaml () creerà nel tuo caso una class AlbumBase (per impostazione predefinita nella sottodirectory generated ) e un Album extends AlbumBase class vuoto Album extends AlbumBase . Ad esempio, se l' Album è istanziato, AlbumBase deve essere già noto o caricato da un caricatore automatico.

Il problema si trova nell'ordine di autoloading delle classi del model.

I templates "Base" generati vivono sotto la directory "models / generated" e gli altri nella directory sopra.

L'ordine di caricamento non può essere garantito, quindi a volte un model viene caricato prima del model Base su cui si estende e quindi genera questo errore.

Nel mio file bootstrap, ora ho incluso esplicitamente l'ordine di caricamento delle directory come segue:

 Doctrine::loadModels(arrays(APPPATH.'/models/generated', APPPATH.'/models')); 

La documentazione utilizza molti esempi che generano file generati ma non menziona questo comportmento quando si parla di configurazioni di bootstrap.

Ad each modo, felice questo è stato risolto ora! 🙂