Fix MigrationRunner to properly detect migration class names from filenames
This commit is contained in:
parent
23a8dbcaf6
commit
1db39e1328
|
|
@ -136,25 +136,41 @@ class MigrationRunner
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Получаем имя класса из имени файла (001_create_base_tables.php -> CreateBaseTables)
|
||||||
|
$fileName = basename($filename, '.php');
|
||||||
|
$classNameParts = explode('_', $fileName);
|
||||||
|
// Пропускаем номер (первую часть), если он числовой
|
||||||
|
if (is_numeric($classNameParts[0])) {
|
||||||
|
array_shift($classNameParts);
|
||||||
|
}
|
||||||
|
$className = '';
|
||||||
|
foreach ($classNameParts as $part) {
|
||||||
|
$className .= ucfirst($part);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Проверяем, существует ли класс
|
||||||
|
if (!class_exists($className)) {
|
||||||
|
// Если класс не существует, подключаем файл
|
||||||
require_once $filename;
|
require_once $filename;
|
||||||
|
}
|
||||||
|
|
||||||
$className = basename($filename, '.php');
|
// Проверяем снова, существует ли класс
|
||||||
|
if (class_exists($className)) {
|
||||||
|
return new $className();
|
||||||
|
}
|
||||||
|
|
||||||
// Попробуем найти класс в файле
|
// Если не нашли класс по преобразованному имени, пробуем другие подходы
|
||||||
$declaredClasses = get_declared_classes();
|
$declaredClasses = get_declared_classes();
|
||||||
$migrationClass = null;
|
|
||||||
|
|
||||||
foreach ($declaredClasses as $declaredClass) {
|
foreach ($declaredClasses as $declaredClass) {
|
||||||
if (strpos($declaredClass, $className) !== false) {
|
// Проверяем, не является ли класс потомком BaseMigration
|
||||||
$migrationClass = $declaredClass;
|
$reflection = new \ReflectionClass($declaredClass);
|
||||||
break;
|
if ($reflection->isSubclassOf('\App\BaseMigration') ||
|
||||||
|
($reflection->getName() === '\App\BaseMigration') ||
|
||||||
|
$reflection->isSubclassOf('App\BaseMigration')) {
|
||||||
|
return new $declaredClass();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($migrationClass && class_exists($migrationClass)) {
|
|
||||||
return new $migrationClass();
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue