98 lines
2.1 KiB
PHP
Raw Normal View History

2020-04-28 16:34:17 +08:00
<?php
2020-04-28 22:02:03 +08:00
namespace catcher\generate\factory;
2020-04-28 16:34:17 +08:00
use catcher\CatchAdmin;
2020-04-29 09:02:20 +08:00
use think\facade\Db;
2020-04-28 16:34:17 +08:00
abstract class Factory
{
abstract public function done($param);
/**
* parse psr4 path
*
* @time 2020年04月27日
* @return mixed
*/
public function parsePsr4()
{
$composer = \json_decode(file_get_contents(root_path() . 'composer.json'), true);
return $composer['autoload']['psr-4'];
}
/**
* get generate path
*
* @time 2020年04月27日
* @param $filePath
* @return string
*/
protected function getGeneratePath($filePath)
{
$path = explode('\\', $filePath);
$projectRootNamespace = array_shift($path);
$filename = array_pop($path);
$psr4 = $this->parsePsr4();
$filePath = root_path() . $psr4[$projectRootNamespace.'\\'] . DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, $path);
CatchAdmin::makeDirectory($filePath);
return $filePath . DIRECTORY_SEPARATOR . $filename . '.php';
}
/**
* 获取模块地址
*
* @time 2020年04月28日
* @param $filePath
* @return string
*/
public function getModulePath($filePath)
{
$path = explode('\\', $filePath);
$projectRootNamespace = array_shift($path);
$module = array_shift($path);
$psr4 = $this->parsePsr4();
return root_path() . $psr4[$projectRootNamespace.'\\'] . DIRECTORY_SEPARATOR. $module . DIRECTORY_SEPARATOR;
}
2020-04-28 22:02:03 +08:00
/**
* parse filename
*
* @time 2020年04月27日
* @param $filename
* @return array
*/
public function parseFilename($filename)
{
$namespace = explode('\\', $filename);
$className = ucfirst(array_pop($namespace));
$namespace = implode('\\', $namespace);
return [$className, $namespace];
}
2020-04-29 09:02:20 +08:00
/**
*
* @time 2020年04月28日
* @param $table
* @return bool
*/
protected function hasTableExists($table)
{
$tables = Db::getConnection()->getTables();
2020-05-08 19:21:31 +08:00
return in_array(\config('database.connections.mysql.prefix') . $table, $tables);
2020-04-29 09:02:20 +08:00
}
2020-04-28 16:34:17 +08:00
}