215 lines
5.3 KiB
PHP
215 lines
5.3 KiB
PHP
<?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;
|
||
}
|
||
}
|