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! 🙂