我正在编写一个Laravel套件,在其服务提供者中,该套件接收要发布的迁移列表,使用以下代码:
protected function publishMigrations(array $publishables): void
{
// Generate a list of migrations that have not been published yet.
$migrations = [];
foreach($publishables as $publishable)
{
// Migration already exists, continuing
if(class_exists($publishable)){
continue;
}
$file = Str::snake($publishable) . '.php';
$migrations[self::MIGRATIONS_PATH . $file . '.stub'] = database_path('migrations/'.date('Y_m_d_His', time())."_$file");
}
$this->publishes($migrations, 'migrations');
}
该软件包的$publishables
的一个示例可能是:
$publishables = ['CreateAuthenticationsTable', 'CreateCustomersTable', 'CreateTransactionsTable'];
代码确实按预期工作,发布我打算发布的迁移,但是我正在尝试使用
class_exists($publishable)
行避免重复发布相同的迁移。据我所知,Laravel MediaLibrary也在使用相同的方法。但是我猜测,当发布资源时,迁移不会被加载,因为那段代码从未运行过。(class_exists始终为false)是否有一种方法可以跟踪已经发布的迁移?这是一个自动加载的问题吗?