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;
|
|||
|
}
|
|||
|
}
|