php - example - findall symfony
¿Por qué no puedo crear un modelo de Doctrine llamado ''Album''? (2)
Estoy usando Doctrine como ORM en mi proyecto, pero corrí contra un extraño error:
Usando el siguiente YAML:
Album:
tableName: dpp_album
actAs: [Timestampable]
columns:
name: string(255)
description: string(255)
online: boolean
Luego genero mis modelos, pero al actualizar mi página y cargar automáticamente los modelos, PHP cumple este error:
Error grave: Clase ''BaseAlbum'' no encontrada en E: / sites / dpp / system / application / models / Album.php en la línea 13
Curiosamente, todos mis otros modelos están bien y las clases base se encuentran en esos casos.
Al cambiar el nombre ''Álbum'' a algo así como ''Establecer'' ¡simplemente funciona! ¿No es extraño?
Por lo tanto, parece que el uso de ''Álbum'' de alguna manera entra en conflicto, aunque el mensaje de error sugiere algo más. Cambiar a los álbumes en plural tampoco funciona, ¡cualquier otra cosa está bien!
¿Alguna sugerencia?
¡Gracias!
El problema radica en el orden de carga automática de las clases modelo.
Los modelos ''Base'' generados viven en el directorio ''modelos / generado'' y los otros en el directorio anterior.
No se puede garantizar el orden de carga, por lo tanto, a veces un modelo se carga antes del modelo Base sobre el que se extiende y, por lo tanto, arroja este error.
En mi archivo bootstrap, he incluido explícitamente el orden de carga de los directorios de la siguiente manera:
Doctrine::loadModels(array(APPPATH.''/models/generated'', APPPATH.''/models''));
La documentación usa muchos ejemplos que resultan en archivos generados, pero no menciona este comportamiento cuando se habla de configuraciones de arranque.
De todos modos, ¡feliz de que esto esté arreglado ahora! :-)
Si se establece la opción generateBaseClasses (por defecto) generateModelsFromYaml () creará en su caso una clase AlbumBase
(por defecto en el subdirectorio generated
) y una clase vacía Album extends AlbumBase
. Es decir, si se AlbumBase
instancia de Album
AlbumBase
ya debe ser conocido o cargado por algún autocargador.