...
|
...
|
@@ -360,10 +360,17 @@ class Crud extends Command |
|
|
list($validateNamespace, $validateName, $validateFile, $validateArr) = $this->getValidateData($validateModuleName, $validate, $table);
|
|
|
|
|
|
$controllerUrl = strtolower(implode('/', $controllerArr));
|
|
|
$controllerBaseName = strtolower(implode(DS, $controllerArr));
|
|
|
|
|
|
//处理基础文件名,取消所有下划线并转换为小写
|
|
|
$baseNameArr = $controllerArr;
|
|
|
$baseFileName = Loader::parseName(array_pop($baseNameArr), 1);
|
|
|
array_push($baseNameArr, $baseFileName);
|
|
|
$controllerBaseName = strtolower(implode(DS, $baseNameArr));
|
|
|
|
|
|
//视图文件
|
|
|
$viewDir = $adminPath . 'view' . DS . $controllerBaseName . DS;
|
|
|
$viewArr = $controllerArr;
|
|
|
array_unshift($viewArr, 'view');
|
|
|
$viewDir = $adminPath . implode(DS, $viewArr) . DS;
|
|
|
|
|
|
//最终将生成的文件路径
|
|
|
$javascriptFile = ROOT_PATH . 'public' . DS . 'assets' . DS . 'js' . DS . 'backend' . DS . $controllerBaseName . '.js';
|
...
|
...
|
@@ -392,12 +399,20 @@ class Crud extends Command |
|
|
unlink($v);
|
|
|
}
|
|
|
//删除空文件夹
|
|
|
if ($v == $modelFile) {
|
|
|
$this->removeEmptyBaseDir($v, $modelArr);
|
|
|
} elseif ($v == $validateFile) {
|
|
|
$this->removeEmptyBaseDir($v, $validateArr);
|
|
|
} else {
|
|
|
$this->removeEmptyBaseDir($v, $controllerArr);
|
|
|
switch ($v) {
|
|
|
case $modelFile:
|
|
|
$this->removeEmptyBaseDir($v, $modelArr);
|
|
|
break;
|
|
|
case $validateFile:
|
|
|
$this->removeEmptyBaseDir($v, $validateArr);
|
|
|
break;
|
|
|
case $addFile:
|
|
|
case $editFile:
|
|
|
case $indexFile:
|
|
|
$this->removeEmptyBaseDir($v, $viewArr);
|
|
|
break;
|
|
|
default:
|
|
|
$this->removeEmptyBaseDir($v, $controllerArr);
|
|
|
}
|
|
|
}
|
|
|
|
...
|
...
|
@@ -848,7 +863,6 @@ class Crud extends Command |
|
|
$relation['relationMode'] = $relation['relationMode'] == 'hasone' ? 'hasOne' : 'belongsTo';
|
|
|
|
|
|
//关联字段
|
|
|
$relation['relationForeignKey'] = $relation['relationForeignKey'];
|
|
|
$relation['relationPrimaryKey'] = $relation['relationPrimaryKey'] ? $relation['relationPrimaryKey'] : $priKey;
|
|
|
|
|
|
//预载入的方法
|
...
|
...
|
@@ -883,38 +897,38 @@ class Crud extends Command |
|
|
}
|
|
|
|
|
|
// 生成控制器文件
|
|
|
$result = $this->writeToFile('controller', $data, $controllerFile);
|
|
|
$this->writeToFile('controller', $data, $controllerFile);
|
|
|
// 生成模型文件
|
|
|
$result = $this->writeToFile('model', $data, $modelFile);
|
|
|
$this->writeToFile('model', $data, $modelFile);
|
|
|
|
|
|
if ($relations) {
|
|
|
foreach ($relations as $i => $relation) {
|
|
|
$relation['modelNamespace'] = $data['modelNamespace'];
|
|
|
if (!is_file($relation['relationFile'])) {
|
|
|
// 生成关联模型文件
|
|
|
$result = $this->writeToFile('relationmodel', $relation, $relation['relationFile']);
|
|
|
$this->writeToFile('relationmodel', $relation, $relation['relationFile']);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
// 生成验证文件
|
|
|
$result = $this->writeToFile('validate', $data, $validateFile);
|
|
|
$this->writeToFile('validate', $data, $validateFile);
|
|
|
// 生成视图文件
|
|
|
$result = $this->writeToFile('add', $data, $addFile);
|
|
|
$result = $this->writeToFile('edit', $data, $editFile);
|
|
|
$result = $this->writeToFile('index', $data, $indexFile);
|
|
|
$this->writeToFile('add', $data, $addFile);
|
|
|
$this->writeToFile('edit', $data, $editFile);
|
|
|
$this->writeToFile('index', $data, $indexFile);
|
|
|
if ($recyclebinHtml) {
|
|
|
$result = $this->writeToFile('recyclebin', $data, $recyclebinFile);
|
|
|
$this->writeToFile('recyclebin', $data, $recyclebinFile);
|
|
|
$recyclebinTitle = in_array('title', $fieldArr) ? 'title' : (in_array('name', $fieldArr) ? 'name' : '');
|
|
|
$recyclebinTitleJs = $recyclebinTitle ? "\n {field: '{$recyclebinTitle}', title: __('" . (ucfirst($recyclebinTitle)) . "'), align: 'left'}," : '';
|
|
|
$data['recyclebinJs'] = $this->getReplacedStub('mixins/recyclebinjs', ['recyclebinTitleJs' => $recyclebinTitleJs, 'controllerUrl' => $controllerUrl]);
|
|
|
}
|
|
|
// 生成JS文件
|
|
|
$result = $this->writeToFile('javascript', $data, $javascriptFile);
|
|
|
$this->writeToFile('javascript', $data, $javascriptFile);
|
|
|
// 生成语言文件
|
|
|
if ($langList) {
|
|
|
$result = $this->writeToFile('lang', $data, $langFile);
|
|
|
$this->writeToFile('lang', $data, $langFile);
|
|
|
}
|
|
|
} catch (\think\exception\ErrorException $e) {
|
|
|
} catch (think\exception\ErrorException $e) {
|
|
|
throw new Exception("Code: " . $e->getCode() . "\nLine: " . $e->getLine() . "\nMessage: " . $e->getMessage() . "\nFile: " . $e->getFile());
|
|
|
}
|
|
|
|
...
|
...
|
@@ -999,13 +1013,17 @@ EOD; |
|
|
if (count($parseArr) > 1) {
|
|
|
$parentDir = dirname($parseFile);
|
|
|
for ($i = 0; $i < count($parseArr); $i++) {
|
|
|
$iterator = new \FilesystemIterator($parentDir);
|
|
|
$isDirEmpty = !$iterator->valid();
|
|
|
if ($isDirEmpty) {
|
|
|
rmdir($parentDir);
|
|
|
$parentDir = dirname($parentDir);
|
|
|
} else {
|
|
|
return true;
|
|
|
try {
|
|
|
$iterator = new \FilesystemIterator($parentDir);
|
|
|
$isDirEmpty = !$iterator->valid();
|
|
|
if ($isDirEmpty) {
|
|
|
rmdir($parentDir);
|
|
|
$parentDir = dirname($parentDir);
|
|
|
} else {
|
|
|
return true;
|
|
|
}
|
|
|
} catch (\UnexpectedValueException $e) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
}
|
...
|
...
|
@@ -1050,17 +1068,16 @@ EOD; |
|
|
|
|
|
/**
|
|
|
* 获取已解析相关信息
|
|
|
* @param $module
|
|
|
* @param $name
|
|
|
* @param $table
|
|
|
* @param $type
|
|
|
* @param string $module 模块名称
|
|
|
* @param string $name 自定义名称
|
|
|
* @param string $table 数据表名
|
|
|
* @param string $type 解析类型,本例中为controller、model、validate
|
|
|
* @return array
|
|
|
*/
|
|
|
protected function getParseNameData($module, $name, $table, $type)
|
|
|
{
|
|
|
$arr = [];
|
|
|
if (!$name) {
|
|
|
$arr = explode('_', strtolower($table));
|
|
|
$arr = [Loader::parseName($table, 1)];
|
|
|
} else {
|
|
|
$name = str_replace(['.', '/', '\\'], '/', $name);
|
|
|
$arr = explode('/', $name);
|
...
|
...
|
@@ -1071,14 +1088,14 @@ EOD; |
|
|
$moduleDir = APP_PATH . $module . DS;
|
|
|
$parseFile = $moduleDir . $type . DS . ($arr ? implode(DS, $arr) . DS : '') . $parseName . '.php';
|
|
|
$parseArr = $arr;
|
|
|
$parseArr[] = $parseName;
|
|
|
$parseArr[] = Loader::parseName($parseName);
|
|
|
return [$parseNamespace, $parseName, $parseFile, $parseArr];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 写入到文件
|
|
|
* @param string $name
|
|
|
* @param array $data
|
|
|
* @param array $data
|
|
|
* @param string $pathname
|
|
|
* @return mixed
|
|
|
*/
|
...
|
...
|
@@ -1099,7 +1116,7 @@ EOD; |
|
|
/**
|
|
|
* 获取替换后的数据
|
|
|
* @param string $name
|
|
|
* @param array $data
|
|
|
* @param array $data
|
|
|
* @return string
|
|
|
*/
|
|
|
protected function getReplacedStub($name, $data)
|
...
|
...
|
@@ -1136,7 +1153,6 @@ EOD; |
|
|
protected function getLangItem($field, $content)
|
|
|
{
|
|
|
if ($content || !Lang::has($field)) {
|
|
|
$itemArr = [];
|
|
|
$this->fieldMaxLen = strlen($field) > $this->fieldMaxLen ? strlen($field) : $this->fieldMaxLen;
|
|
|
$content = str_replace(',', ',', $content);
|
|
|
if (stripos($content, ':') !== false && stripos($content, ',') && stripos($content, '=') !== false) {
|
...
|
...
|
@@ -1165,7 +1181,7 @@ EOD; |
|
|
|
|
|
/**
|
|
|
* 读取数据和语言数组列表
|
|
|
* @param array $arr
|
|
|
* @param array $arr
|
|
|
* @param boolean $withTpl
|
|
|
* @return array
|
|
|
*/
|
...
|
...
|
@@ -1285,8 +1301,8 @@ EOD; |
|
|
|
|
|
/**
|
|
|
* 判断是否符合指定后缀
|
|
|
* @param string $field 字段名称
|
|
|
* @param mixed $suffixArr 后缀
|
|
|
* @param string $field 字段名称
|
|
|
* @param mixed $suffixArr 后缀
|
|
|
* @return boolean
|
|
|
*/
|
|
|
protected function isMatchSuffix($field, $suffixArr)
|
...
|
...
|
@@ -1353,7 +1369,7 @@ EOD; |
|
|
* @param string $field
|
|
|
* @param string $datatype
|
|
|
* @param string $extend
|
|
|
* @param array $itemArr
|
|
|
* @param array $itemArr
|
|
|
* @return string
|
|
|
*/
|
|
|
protected function getJsColumn($field, $datatype = '', $extend = '', $itemArr = [])
|
...
|
...
|
|