mirror of
https://gitee.com/ulthon/ulthon_admin.git
synced 2026-07-08 02:52:49 +08:00
修复seeder错误;删除第三方的think迁移工具,在extend中重新实现;
This commit is contained in:
77
extend/think/migration/Creator.php
Normal file
77
extend/think/migration/Creator.php
Normal file
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace think\migration;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use Phinx\Util\Util;
|
||||
use RuntimeException;
|
||||
use think\App;
|
||||
|
||||
class Creator
|
||||
{
|
||||
|
||||
protected $app;
|
||||
|
||||
public function __construct(App $app)
|
||||
{
|
||||
$this->app = $app;
|
||||
}
|
||||
|
||||
public function create(string $className)
|
||||
{
|
||||
$path = $this->ensureDirectory();
|
||||
|
||||
if (!Util::isValidPhinxClassName($className)) {
|
||||
throw new InvalidArgumentException(sprintf('The migration class name "%s" is invalid. Please use CamelCase format.', $className));
|
||||
}
|
||||
|
||||
if (!Util::isUniqueMigrationClassName($className, $path)) {
|
||||
throw new InvalidArgumentException(sprintf('The migration class name "%s" already exists', $className));
|
||||
}
|
||||
|
||||
// Compute the file path
|
||||
$fileName = Util::mapClassNameToFileName($className);
|
||||
$filePath = $path . DIRECTORY_SEPARATOR . $fileName;
|
||||
|
||||
if (is_file($filePath)) {
|
||||
throw new InvalidArgumentException(sprintf('The file "%s" already exists', $filePath));
|
||||
}
|
||||
|
||||
// Verify that the template creation class (or the aliased class) exists and that it implements the required interface.
|
||||
$aliasedClassName = null;
|
||||
|
||||
// Load the alternative template if it is defined.
|
||||
$contents = file_get_contents($this->getTemplate());
|
||||
|
||||
// inject the class names appropriate to this migration
|
||||
$contents = strtr($contents, [
|
||||
'MigratorClass' => $className,
|
||||
]);
|
||||
|
||||
if (false === file_put_contents($filePath, $contents)) {
|
||||
throw new RuntimeException(sprintf('The file "%s" could not be written to', $path));
|
||||
}
|
||||
|
||||
return $filePath;
|
||||
}
|
||||
|
||||
protected function ensureDirectory()
|
||||
{
|
||||
$path = $this->app->getRootPath() . 'database' . DIRECTORY_SEPARATOR . 'migrations';
|
||||
|
||||
if (!is_dir($path) && !mkdir($path, 0755, true)) {
|
||||
throw new InvalidArgumentException(sprintf('directory "%s" does not exist', $path));
|
||||
}
|
||||
|
||||
if (!is_writable($path)) {
|
||||
throw new InvalidArgumentException(sprintf('directory "%s" is not writable', $path));
|
||||
}
|
||||
|
||||
return $path;
|
||||
}
|
||||
|
||||
protected function getTemplate()
|
||||
{
|
||||
return __DIR__ . '/command/stubs/migrate.stub';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user