Files
xk-api-yii/admin/controllers/system/GeneratorController.php

111 lines
3.7 KiB
PHP

<?php
namespace admin\controllers\system;
use admin\components\BaseAdminController;
use admin\generators\model\Generator;
use common\modelsgii\Menu2;
/**
* Created by PhpStorm.
* User: chatfeed
* Date: 2022/5/14
* Time: 7:43 PM
*/
class GeneratorController extends BaseAdminController {
public $enableCsrfValidation=false;
public function actionTables(){
$db = \Yii::$app->db;
if ($db === null) {
return [];
}
$tableNames = [];
//if (strpos($this->tableName, '*') !== false) {
// if (($pos = strrpos($this->tableName, '.')) !== false) {
// $schema = substr($this->tableName, 0, $pos);
// $pattern = '/^' . str_replace('*', '\w+', substr($this->tableName, $pos + 1)) . '$/';
// } else {
// $schema = '';
// $pattern = '/^' . str_replace('*', '\w+', $this->tableName) . '$/';
// }
$schema = '';
foreach ($db->schema->getTableNames($schema) as $table) {
$tableNames[] = $schema === '' ? $table : ($schema . '.' . $table);
}
//} elseif (($table = $db->getTableSchema($this->tableName, true)) !== null) {
// $tableNames[] = $this->tableName;
// $this->classNames[$this->tableName] = $this->modelClass;
//}
return $tableNames;
}
public function actionFields(){
$tableName = $this->post('table_name');
$db = \Yii::$app->db;
if ($db === null) {
return [];
}
$tableSchema = $db->getTableSchema($tableName);
return $tableSchema->columns;
}
public function actionConfig(){
return [
'controllerClass'=>'backend\controllers\\',
'baseControllerClass'=>'backend\components\BaseBackendController',
'actionIds'=>'list,save,info,del',
'vuePath'=>'/Users/chatfeed/arco-work/',
'controllerNamespace'=>'backend\controllers\\',
];
}
public function actionGenerate(){
//model generate
$modelGen = new Generator();
$modelGen->setAttributes(
[
'db'=>'db',
'useTablePrefix'=>$this->post('useTablePrefix'),
'ns'=>'common\modelsgii',
'tableName'=>$this->post('table_name'),
'baseClass'=>'common\core\BaseActiveRecord',
'queryNs'=>'common\models',
],
);
$modelClass = $modelGen->generateClassName($this->post('table_name'));
$files = $modelGen->generate();
//controller 生成
$conGEn = new \backend\generators\controller\Generator();
$conGEn->setAttributes([
'controllerClass'=>$this->post('controllerClass'),
'baseClass'=>$this->post('baseControllerClass'),
'actions'=>$this->post('actionIds'),
'controllerNamespace'=>$this->post('controllerNamespace')
]);
$files = $conGEn->generate();
foreach ($files as $f){
$f->save();
}
//vue生成
$vueGen = new \backend\generators\vue\Generator();
$vueGen->setAttributes([
'className'=>$modelClass,
'vuePath'=>$this->post('vuePath'),
'columns'=>$this->post('columns'),
'pagePath'=>$this->post('pagePath'),
'apiPath'=>$conGEn->getControllerSubPath().$conGEn->getControllerID(),
'actions'=>$this->post('actionIds'),
]);
$files = $vueGen->generate();
foreach ($files as $f){
$f->save();
}
return $files;
}
private function generatePHP(){
}
}