69 lines
2.4 KiB
PHP
69 lines
2.4 KiB
PHP
<?php
|
||
/**
|
||
* Phinx 迁移引导:加载配置使 support\think\Db 可用(InstallData 等迁移需检查数据是否存在)
|
||
*/
|
||
declare(strict_types=1);
|
||
|
||
$baseDir = __DIR__;
|
||
|
||
if (!defined('BASE_PATH')) {
|
||
define('BASE_PATH', $baseDir);
|
||
}
|
||
|
||
require $baseDir . '/vendor/autoload.php';
|
||
|
||
if (class_exists('Dotenv\Dotenv') && is_file($baseDir . '/.env')) {
|
||
if (method_exists('Dotenv\Dotenv', 'createUnsafeImmutable')) {
|
||
Dotenv\Dotenv::createUnsafeImmutable($baseDir)->load();
|
||
} else {
|
||
Dotenv\Dotenv::createMutable($baseDir)->load();
|
||
}
|
||
}
|
||
|
||
if (!function_exists('env')) {
|
||
function env(string $key, mixed $default = null): mixed
|
||
{
|
||
$value = $_ENV[$key] ?? getenv($key);
|
||
if ($value !== false && $value !== null) {
|
||
return $value;
|
||
}
|
||
if (strpos($key, '.') !== false) {
|
||
$parts = explode('.', $key);
|
||
$upper = strtoupper(implode('_', $parts));
|
||
$value = $_ENV[$upper] ?? getenv($upper);
|
||
if ($value !== false && $value !== null) {
|
||
return $value;
|
||
}
|
||
}
|
||
return $default;
|
||
}
|
||
}
|
||
|
||
require $baseDir . '/vendor/workerman/webman-framework/src/support/helpers.php';
|
||
require $baseDir . '/app/functions.php';
|
||
|
||
use Webman\Config;
|
||
|
||
Config::clear();
|
||
Config::load($baseDir . '/config', ['route', 'middleware', 'process', 'server', 'static']);
|
||
// 与 Webman\ThinkOrm\ThinkOrm::start() 一致,并与 phinx.php 中 $thinkorm 来源一致
|
||
$thinkorm = array_replace_recursive(config('thinkorm', []), config('think-orm', []));
|
||
if (!empty($thinkorm)) {
|
||
support\think\Db::setConfig($thinkorm);
|
||
// Webman DbManager 使用连接池且忽略 force;安装向导在同进程内迁移时若不清理,会沿用旧前缀连接,
|
||
// 导致 Phinx 已建带前缀表而 Db::name() 仍查无前缀表(如 menu_rule 不存在)。
|
||
if (class_exists(\Webman\ThinkOrm\DbManager::class)) {
|
||
$ref = new \ReflectionClass(\Webman\ThinkOrm\DbManager::class);
|
||
if ($ref->hasProperty('pools')) {
|
||
$poolsProp = $ref->getProperty('pools');
|
||
$poolsProp->setAccessible(true);
|
||
$poolsProp->setValue(null, []);
|
||
}
|
||
}
|
||
if (class_exists(\Webman\Context::class)) {
|
||
foreach (array_keys($thinkorm['connections'] ?? []) as $connName) {
|
||
\Webman\Context::set('think-orm.connections.' . $connName, null);
|
||
}
|
||
}
|
||
}
|