197 lines
4.9 KiB
PHP
197 lines
4.9 KiB
PHP
<?php
|
||
namespace catcher\generate\factory;
|
||
|
||
use catcher\CatchAdmin;
|
||
use catcher\exceptions\FailedException;
|
||
use catcher\facade\FileSystem;
|
||
use catcher\generate\build\classes\Methods;
|
||
use catcher\generate\build\CatchBuild;
|
||
use catcher\generate\build\classes\Classes;
|
||
use catcher\generate\build\classes\Property;
|
||
use catcher\generate\build\classes\Uses;
|
||
use PhpParser\BuilderFactory;
|
||
use PhpParser\Node\Expr\Closure;
|
||
use PhpParser\Node\Expr\ClosureUse;
|
||
use PhpParser\PrettyPrinter\Standard;
|
||
use think\helper\Str;
|
||
use PhpParser\Error;
|
||
use PhpParser\NodeDumper;
|
||
use PhpParser\ParserFactory;
|
||
use PhpParser\PrettyPrinter;
|
||
use PhpParser\Node;
|
||
|
||
class Controller extends Factory
|
||
{
|
||
protected $methods = [];
|
||
|
||
protected $uses = [
|
||
'catcher\base\CatchRequest as Request',
|
||
'catcher\CatchResponse',
|
||
'catcher\base\CatchController'
|
||
];
|
||
|
||
/**
|
||
*
|
||
* @time 2020年04月27日
|
||
* @param $params
|
||
* @return bool|string|string[]
|
||
*/
|
||
public function done($params)
|
||
{
|
||
// 写入成功之后
|
||
$controllerPath = $this->getGeneratePath($params['controller']);
|
||
|
||
if (FileSystem::put($controllerPath, $this->getContent($params))) {
|
||
return $controllerPath;
|
||
}
|
||
|
||
throw new FailedException($params['controller'] . ' generate failed~');
|
||
}
|
||
|
||
/**
|
||
* 获取内容
|
||
*
|
||
* @time 2020年04月28日
|
||
* @param $params
|
||
* @return bool|string|string[]
|
||
*/
|
||
public function getContent($params)
|
||
{
|
||
if (!$params['controller']) {
|
||
throw new FailedException('params has lost~');
|
||
}
|
||
|
||
// parse controller
|
||
[$className, $namespace] = $this->parseFilename($params['controller']);
|
||
|
||
[$model, $modelNamespace] = $this->parseFilename($params['model']);
|
||
|
||
$asModel = lcfirst(Str::contains($model, 'Model') ? : $model . 'Model');
|
||
|
||
if (!$className) {
|
||
throw new FailedException('未填写控制器名称');
|
||
}
|
||
|
||
$use = new Uses();
|
||
$class = new Classes($className);
|
||
|
||
return (new CatchBuild())->namespace($namespace)
|
||
->use($use->name('catcher\base\CatchRequest', 'Request'))
|
||
->use($use->name('catcher\CatchResponse'))
|
||
->use($use->name('catcher\base\CatchController'))
|
||
->use($use->name($modelNamespace . '\\' . ucfirst($model), $asModel))
|
||
->class($class->extend('CatchController')->docComment(), function (Classes $class) use ($asModel) {
|
||
foreach ($this->getMethods($asModel) as $method) {
|
||
$class->addMethod($method);
|
||
}
|
||
|
||
$class->addProperty(
|
||
(new Property($asModel))->public()
|
||
);
|
||
|
||
})
|
||
->getContent();
|
||
}
|
||
|
||
|
||
/**
|
||
* 方法集合
|
||
*
|
||
* @time 2020年11月19日
|
||
* @param $model
|
||
* @return array
|
||
*/
|
||
protected function getMethods($model)
|
||
{
|
||
$date = date('Y年m月d日 H:i');
|
||
|
||
|
||
return [
|
||
(new Methods('__construct'))
|
||
->public()
|
||
->param($model, ucfirst($model))
|
||
->docComment("\r\n")
|
||
->declare($model, $model),
|
||
|
||
(new Methods('index'))->public()
|
||
->param('request', 'Request')
|
||
->docComment(
|
||
<<<TEXT
|
||
|
||
/**
|
||
* 列表
|
||
* @time $date
|
||
* @param Request \$request
|
||
*/
|
||
TEXT
|
||
)
|
||
->returnType('\think\Response')->index($model),
|
||
|
||
(new Methods('save'))
|
||
->public()
|
||
->param('request', 'Request')
|
||
->docComment(
|
||
<<<TEXT
|
||
|
||
/**
|
||
* 保存信息
|
||
* @time $date
|
||
* @param Request \$request
|
||
*/
|
||
TEXT
|
||
)
|
||
->returnType('\think\Response')
|
||
->save($model),
|
||
|
||
|
||
(new Methods('read'))->public()
|
||
->param('id')
|
||
->docComment(
|
||
<<<TEXT
|
||
|
||
/**
|
||
* 读取
|
||
* @time $date
|
||
* @param \$id
|
||
*/
|
||
TEXT
|
||
|
||
)
|
||
->returnType('\think\Response')->read($model),
|
||
|
||
|
||
(new Methods('update'))->public()
|
||
->param('request', 'Request')
|
||
->param('id')
|
||
->docComment(
|
||
<<<TEXT
|
||
|
||
/**
|
||
* 更新
|
||
* @time $date
|
||
* @param Request \$request
|
||
* @param \$id
|
||
*/
|
||
TEXT
|
||
)
|
||
->returnType('\think\Response')->update($model),
|
||
|
||
|
||
(new Methods('delete'))->public()
|
||
->param('id')
|
||
->docComment(
|
||
<<<TEXT
|
||
|
||
/**
|
||
* 删除
|
||
* @time $date
|
||
* @param \$id
|
||
*/
|
||
TEXT
|
||
)
|
||
->returnType('\think\Response')->delete($model),
|
||
|
||
];
|
||
}
|
||
}
|