first commit
This commit is contained in:
214
modules/Develop/Support/Generate/Generator.php
Normal file
214
modules/Develop/Support/Generate/Generator.php
Normal file
@@ -0,0 +1,214 @@
|
||||
<?php
|
||||
|
||||
// +----------------------------------------------------------------------
|
||||
// | CatchAdmin [Just Like ~ ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2017~2021 https://catchadmin.com All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed ( https://github.com/JaguarJack/catchadmin-laravel/blob/master/LICENSE.md )
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: JaguarJack [ njphper@gmail.com ]
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace Modules\Develop\Support\Generate;
|
||||
|
||||
use Catch\Exceptions\FailedException;
|
||||
use Exception;
|
||||
use Illuminate\Contracts\Filesystem\FileNotFoundException;
|
||||
use Modules\Develop\Support\Generate\Create\Controller;
|
||||
use Modules\Develop\Support\Generate\Create\FrontForm;
|
||||
use Modules\Develop\Support\Generate\Create\FrontTable;
|
||||
use Modules\Develop\Support\Generate\Create\Model;
|
||||
use Modules\Develop\Support\Generate\Create\Request;
|
||||
use Modules\Develop\Support\Generate\Create\Route;
|
||||
|
||||
/**
|
||||
* @class Generator
|
||||
*/
|
||||
class Generator
|
||||
{
|
||||
/**
|
||||
* @var array{module:string,controller:string,model:string,paginate: bool,schema: string}
|
||||
*/
|
||||
protected array $gen;
|
||||
|
||||
/**
|
||||
* @var array{name: string,charset: string, collection: string,
|
||||
* comment:string,created_at: bool, updated_at: bool, deleted_at: bool,
|
||||
* creator_id: bool, updated_at: bool, engine: string}
|
||||
*/
|
||||
protected array $schema;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected array $structures;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected array $files = [];
|
||||
|
||||
|
||||
/**
|
||||
* this model name from controller
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected string $modelName;
|
||||
|
||||
|
||||
/**
|
||||
* this request name for controller
|
||||
*
|
||||
* @var ?string
|
||||
*/
|
||||
protected ?string $requestName;
|
||||
|
||||
/**
|
||||
* generate
|
||||
*
|
||||
* @throws Exception
|
||||
* @return bool
|
||||
*/
|
||||
public function generate(): bool
|
||||
{
|
||||
try {
|
||||
$this->files[] = $this->createModel();
|
||||
|
||||
$this->files[] = $this->createRequest();
|
||||
|
||||
$this->files[] = $this->createController();
|
||||
|
||||
$this->files[] = $this->createFrontTable();
|
||||
|
||||
$this->files[] = $this->createFrontForm();
|
||||
|
||||
$this->files[] = $this->createRoute();
|
||||
} catch (Exception $e) {
|
||||
$this->rollback();
|
||||
throw new FailedException($e->getMessage());
|
||||
}
|
||||
|
||||
$this->files = [];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* create route
|
||||
*
|
||||
* @throws FileNotFoundException
|
||||
* @return bool|string
|
||||
*/
|
||||
public function createRoute(): bool|string
|
||||
{
|
||||
// 保存之前的 route 文件
|
||||
$route = new Route($this->gen['controller']);
|
||||
|
||||
return $route->setModule($this->gen['module'])->create();
|
||||
}
|
||||
|
||||
/**
|
||||
* create font
|
||||
*
|
||||
* @throws FileNotFoundException
|
||||
* @return bool|string|null
|
||||
*/
|
||||
public function createFrontTable(): bool|string|null
|
||||
{
|
||||
$table = new FrontTable($this->gen['controller'], $this->gen['paginate'], (new Route($this->gen['controller']))->setModule($this->gen['module'])->getApiRute());
|
||||
|
||||
return $table->setModule($this->gen['module'])->setStructures($this->structures)->create();
|
||||
}
|
||||
|
||||
/**
|
||||
* create font
|
||||
*
|
||||
* @throws FileNotFoundException
|
||||
* @return bool|string|null
|
||||
*/
|
||||
public function createFrontForm(): bool|string|null
|
||||
{
|
||||
$form = new FrontForm($this->gen['controller']);
|
||||
|
||||
return $form->setModule($this->gen['module'])->setStructures($this->structures)->create();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* create model
|
||||
*
|
||||
* @throws FileNotFoundException
|
||||
* @return bool|string
|
||||
*/
|
||||
protected function createModel(): bool|string
|
||||
{
|
||||
$model = new Model($this->gen['model'], $this->gen['schema'], $this->gen['module']);
|
||||
|
||||
$this->modelName = $model->getModelName();
|
||||
|
||||
return $model->setModule($this->gen['module'])->setStructures($this->structures)->create();
|
||||
}
|
||||
|
||||
/**
|
||||
* create request
|
||||
*
|
||||
* @throws FileNotFoundException
|
||||
* @return bool|string
|
||||
*/
|
||||
protected function createRequest(): bool|string
|
||||
{
|
||||
$request = new Request($this->gen['controller']);
|
||||
|
||||
$file = $request->setStructures($this->structures)->setModule($this->gen['module'])->create();
|
||||
|
||||
$this->requestName = $request->getRequestName();
|
||||
|
||||
return $file;
|
||||
}
|
||||
|
||||
/**
|
||||
* create controller
|
||||
*
|
||||
* @throws FileNotFoundException
|
||||
* @return bool|string
|
||||
*/
|
||||
protected function createController(): bool|string
|
||||
{
|
||||
$controller = new Controller($this->gen['controller'], $this->modelName, $this->requestName);
|
||||
|
||||
return $controller->setModule($this->gen['module'])->create();
|
||||
}
|
||||
|
||||
/**
|
||||
* rollback
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function rollback(): void
|
||||
{
|
||||
// delete controller & model & migration file
|
||||
foreach ($this->files as $file) {
|
||||
unlink($file);
|
||||
}
|
||||
|
||||
// 回填之前的 route 文件
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* set params
|
||||
*
|
||||
* @param array $params
|
||||
* @return $this
|
||||
*/
|
||||
public function setParams(array $params): Generator
|
||||
{
|
||||
$this->gen = $params['codeGen'];
|
||||
|
||||
$this->structures = $params['structures'];
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user