Changed loadModels() once again. Removed loading of models based solely on model filename. Added support for different models with the same file names. All models files are required, in order to determine class names. The changes result in an overall increase in flexibility with respect to model file names.
This commit is contained in:
parent
7e0a902aba
commit
0b89c4dda2
@ -518,39 +518,32 @@ final class Doctrine
|
|||||||
foreach ($it as $file) {
|
foreach ($it as $file) {
|
||||||
$e = explode('.', $file->getFileName());
|
$e = explode('.', $file->getFileName());
|
||||||
if (end($e) === 'php' && strpos($file->getFileName(), '.inc') === false) {
|
if (end($e) === 'php' && strpos($file->getFileName(), '.inc') === false) {
|
||||||
self::$_loadedModelFiles[$e[0]] = $file->getPathName();
|
self::$_loadedModelFiles[] = array(
|
||||||
|
'filename' => $e[0],
|
||||||
|
'filepath' => $file->getPathName()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$loadedModels = array();
|
$loadedModels = array();
|
||||||
|
|
||||||
$modelFiles = array_keys(self::$_loadedModelFiles);
|
$modelFiles = self::$_loadedModelFiles;
|
||||||
|
|
||||||
foreach ($modelFiles as $name) {
|
foreach ($modelFiles as $key => $model) {
|
||||||
$declaredBefore = get_declared_classes();
|
$declaredBefore = get_declared_classes();
|
||||||
if (class_exists($name)) {
|
require_once $model['filepath'];
|
||||||
if (self::isValidModelClass($name) && !in_array($name, $loadedModels)) {
|
$declaredAfter = get_declared_classes();
|
||||||
$loadedModels[] = $name;
|
// Using array_slice because array_diff is broken is some PHP versions
|
||||||
}
|
$foundClasses = array_slice($declaredAfter, count($declaredBefore) - 1);
|
||||||
} else {
|
if ($foundClasses) {
|
||||||
// Determine class names by the actual inclusion of the model file
|
foreach ($foundClasses as $className) {
|
||||||
// The possibility exists that the class name(s) contained in the model
|
if (self::isValidModelClass($className) && !in_array($className, $loadedModels)) {
|
||||||
// file is not the same as the actual model file name itself
|
$loadedModels[] = $className;
|
||||||
if (isset(self::$_loadedModelFiles[$name])) {
|
|
||||||
require_once self::$_loadedModelFiles[$name];
|
|
||||||
$declaredAfter = get_declared_classes();
|
|
||||||
// Using array_slice since array_diff is broken is some versions
|
|
||||||
$foundClasses = array_slice($declaredAfter, count($declaredBefore) - 1);
|
|
||||||
if ($foundClasses) {
|
|
||||||
foreach ($foundClasses as $name) {
|
|
||||||
if (self::isValidModelClass($name) && !in_array($name, $loadedModels)) {
|
|
||||||
$loadedModels[] = $name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -574,7 +567,6 @@ final class Doctrine
|
|||||||
$classes = get_declared_classes();
|
$classes = get_declared_classes();
|
||||||
$classes = array_merge($classes, array_keys(self::$_loadedModelFiles));
|
$classes = array_merge($classes, array_keys(self::$_loadedModelFiles));
|
||||||
}
|
}
|
||||||
|
|
||||||
return self::filterInvalidModels($classes);
|
return self::filterInvalidModels($classes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user