Files
kiri-gii/GiiController.php
T

732 lines
22 KiB
PHP
Raw Normal View History

2022-03-17 10:35:14 +08:00
<?php
declare(strict_types=1);
namespace Gii;
use Exception;
use Kiri;
use ReflectionException;
/**
* Class GiiController
* @package Gii
*/
class GiiController extends GiiBase
{
2023-10-08 22:16:32 +08:00
public string $className = '';
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
public array $fields = [];
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
/**
* GiiController constructor.
* @param $className
* @param $fields
*/
public function __construct($className, $fields, $tableName)
{
$this->className = $className;
$this->fields = $fields;
$this->tableName = $tableName;
}
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
/**
* @return string|bool
* @throws ReflectionException
* @throws Exception
*/
public function generate(): string|bool
{
$path = $this->getControllerPath();
$modelPath = $this->getModelPath();
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$managerName = $this->className;
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$namespace = rtrim($path['namespace'], '\\');
$model_namespace = rtrim($modelPath['namespace'], '\\');
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$class = '';
$controller = str_replace('\\\\', '\\', "$namespace\\{$managerName}Controller");
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$html = "<?php
2022-03-17 10:35:14 +08:00
namespace {$namespace};
";
2023-10-08 22:16:32 +08:00
if (file_exists($path['path'] . '/' . $managerName . 'Controller.php')) {
try {
$class = new \ReflectionClass($controller);
$import = $this->getImports($path['path'] . '/' . $managerName . 'Controller.php', $class);
} catch (\Throwable $Exception) {
error($Exception);
exit();
}
} else {
$import = "use Exception;
use Kiri\Router\Annotate\Post;
use Kiri\Router\Annotate\Get;
2022-03-17 10:35:14 +08:00
use Kiri\Core\Str;
2023-04-17 16:05:52 +08:00
use Kiri\Router\Base\Controller;
2023-10-08 22:16:32 +08:00
use Kiri\Core\Json;
2022-03-17 10:35:14 +08:00
use {$model_namespace}\\{$managerName};
2023-04-17 15:45:21 +08:00
use Kiri\Router\Validator\Validator;
use Psr\Http\Message\ResponseInterface;
2022-03-17 10:35:14 +08:00
";
2023-10-08 22:16:32 +08:00
}
if (!empty($import)) {
$html .= $import;
}
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$controllerName = $managerName;
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$historyModel = "use {$model_namespace}\\{$managerName};";
if (!str_contains($html, $historyModel)) {
$html .= $historyModel;
}
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$html .= "
2022-03-17 10:35:14 +08:00
/**
2023-08-21 16:14:17 +08:00
* Class {$controllerName}Controller
2022-03-17 10:35:14 +08:00
*
* @package controller
*/
2023-08-21 16:14:17 +08:00
class {$controllerName}Controller extends Controller
2022-03-17 10:35:14 +08:00
{
";
2023-10-08 22:16:32 +08:00
$funcNames = [];
if (is_object($class)) {
$html .= $this->getClassProperty($class);
$html .= $this->getClassMethods($class);
}
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$default = ['actionAdd', 'actionUpdate', 'actionAuditing', 'actionBatchAuditing', 'actionDetail', 'actionDelete', 'actionBatchDelete', 'actionList'];
$tableName = str_replace($this->db->tablePrefix, '', $this->tableName);
$tableName = str_replace('_', '-', $tableName);
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
foreach ($default as $key => $val) {
if (str_contains($html, ' function ' . $val . '(')) {
continue;
}
$html .= $this->{'controllerMethod' . str_replace('action', '', $val)}($this->fields, $managerName, $managerName, $path, $tableName) . "\n";
}
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$html .= '
2022-03-17 10:35:14 +08:00
}';
2023-10-08 22:16:32 +08:00
// $file = APP_PATH . 'routes/' . $this->input->getOption('database') . '.php';
// if (!file_exists($file)) {
// touch($file);
// file_put_contents($file, '<?php' . PHP_EOL);
// file_put_contents($file, PHP_EOL, FILE_APPEND);
// file_put_contents($file, PHP_EOL, FILE_APPEND);
// file_put_contents($file, 'use Kiri\Message\Handler\Router;' . PHP_EOL, FILE_APPEND);
// file_put_contents($file, PHP_EOL, FILE_APPEND);
// file_put_contents($file, PHP_EOL, FILE_APPEND);
// }
//
//
// $addRouter = 'Router::group([\'prefix\' => \'' . $tableName . '\',\'namespace\' => \'' . $namespace . '\'], function () {
// Router::post(\'add\', \'' . $controllerName . 'Controller@actionAdd\');
// Router::get(\'list\', \'' . $controllerName . 'Controller@actionList\');
// Router::post(\'update\', \'' . $controllerName . 'Controller@actionUpdate\');
// Router::post(\'auditing\', \'' . $controllerName . 'Controller@actionAuditing\');
// Router::post(\'batch-auditing\', \'' . $controllerName . 'Controller@actionBatchAuditing\');
// Router::post(\'batch-delete\', \'' . $controllerName . 'Controller@actionBatchDelete\');
// Router::post(\'delete\', \'' . $controllerName . 'Controller@actionDelete\');
// Router::get(\'detail\', \'' . $controllerName . 'Controller@actionDetail\');
//});
//';
// if (!str_contains($this->clearBlank(file_get_contents($file)), $this->clearBlank($addRouter))) {
// file_put_contents($file, $addRouter, FILE_APPEND);
// }
$file = $path['path'] . '/' . $controllerName . 'Controller.php';
if (file_exists($file)) {
unlink($file);
}
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
Kiri::writeFile($file, $html);
return $controllerName . 'Controller.php';
}
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
/**
* @return array
*/
private function getControllerPath(): array
{
$dbName = $this->db->id;
if (empty($dbName) || $dbName == 'db') {
$dbName = '';
}
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$module = empty($this->module) ? '' : $this->module;
$modelPath['namespace'] = $this->controllerNamespace . $module;
$modelPath['path'] = $this->controllerPath . $module;
if (!is_dir($modelPath['path'])) {
mkdir($modelPath['path']);
}
if (!empty($dbName)) {
$modelPath['namespace'] = $this->controllerNamespace . ucfirst($dbName);
$modelPath['path'] = $this->controllerPath . ucfirst($dbName);
}
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$modelPath['namespace'] = rtrim($modelPath['namespace'], '\\');
$modelPath['path'] = rtrim($modelPath['path'], '\\');
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
if (!is_dir($modelPath['path'])) {
mkdir($modelPath['path']);
}
return $modelPath;
}
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
/**
* @param $fields
* @param $className
* @param null $object
* @param $path
* @param string $tableName
* @return string
* 新增
*/
public function controllerMethodAdd($fields, $className, $object, $path, string $tableName): string
{
$_path = str_replace(CONTROLLER_PATH, '', $path['path']);
$_path = lcfirst(rtrim($_path, '/')) . '/' . lcfirst($className);
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$_path = ltrim($_path, '/');
2022-03-17 10:35:14 +08:00
2023-10-07 20:33:15 +08:00
// $this->getData($path, $className, $fields);
2023-04-17 16:05:52 +08:00
2023-10-08 22:16:32 +08:00
return '
2022-03-17 10:35:14 +08:00
/**
2023-04-17 16:05:52 +08:00
* @return ResponseInterface
2022-03-17 10:35:14 +08:00
* @throws Exception
*/
2023-10-08 22:16:32 +08:00
#[Post(\'' . $this->db->database . '/' . $tableName . '/add\')]
2023-10-07 20:33:15 +08:00
public function actionAdd(): ResponseInterface
2022-03-17 10:35:14 +08:00
{
$model = new ' . $className . '();
2023-10-07 20:33:15 +08:00
$model->attributes = $this->request->all();
2022-03-17 10:35:14 +08:00
if (!$model->save()) {
2023-04-17 15:45:21 +08:00
return $this->response->json([\'code\' => 500, \'message\' => $model->getLastError()]);
2022-09-21 11:44:43 +08:00
} else {
2023-04-25 23:21:01 +08:00
return $this->response->json([\'code\' => 0, \'param\' => $model->toArray()]);
2022-09-21 11:44:43 +08:00
}
}';
2023-10-08 22:16:32 +08:00
}
2022-09-21 11:44:43 +08:00
2023-10-08 22:16:32 +08:00
/**
* @param $fields
* @param $className
* @param $object
* @param $path
* @param string $tableName
* @return string
*/
public function controllerMethodAuditing($fields, $className, $object, $path, string $tableName): string
{
return '
2022-09-21 11:44:43 +08:00
/**
2023-04-17 16:05:52 +08:00
* @return ResponseInterface
2022-09-21 11:44:43 +08:00
* @throws Exception
*/
2023-10-08 22:16:32 +08:00
#[Post(\'' . $this->db->database . '/' . $tableName . '/auditing\')]
2023-04-17 15:45:21 +08:00
public function actionAuditing(): ResponseInterface
2022-09-21 11:44:43 +08:00
{
$model = ' . $className . '::findOne($this->request->post(\'id\', 0));
if (empty($model)) {
2023-04-17 15:45:21 +08:00
return $this->response->json([\'code\' => 500, \'message\' => \'必填项不能为空\']);
2022-09-21 11:44:43 +08:00
}
if (!$model->update([\'state\' => 1])) {
2023-04-17 15:45:21 +08:00
return $this->response->json([\'code\' => 500, \'message\' => $model->getLastError()]);
2022-09-21 11:44:43 +08:00
} else {
2023-04-25 23:21:01 +08:00
return $this->response->json([\'code\' => 0, \'param\' => $model->toArray()]);
2022-09-21 11:44:43 +08:00
}
}';
2023-10-08 22:16:32 +08:00
}
2022-09-21 11:44:43 +08:00
2023-10-08 22:16:32 +08:00
/**
* @param $fields
* @param $className
* @param $object
* @param $path
* @param string $tableName
* @return string
*/
public function controllerMethodBatchAuditing($fields, $className, $object, $path, string $tableName): string
{
return '
2022-09-21 11:44:43 +08:00
/**
2023-04-17 16:05:52 +08:00
* @return ResponseInterface
2022-09-21 11:44:43 +08:00
* @throws Exception
*/
2023-10-08 22:16:32 +08:00
#[Post(\'' . $this->db->database . '/' . $tableName . '/batch/auditing\')]
2023-04-17 15:45:21 +08:00
public function actionBatchAuditing(): ResponseInterface
2022-09-21 11:44:43 +08:00
{
2023-04-17 15:45:21 +08:00
$ids = $this->request->post(\'ids\', []);
2022-09-21 11:44:43 +08:00
if (empty($ids)) {
2023-04-17 15:45:21 +08:00
return $this->response->json([\'code\' => 500, \'message\' => \'必填项不能为空\']);
2022-09-21 11:44:43 +08:00
}
if (!' . $className . '::query()->whereIn(\'id\', $ids)->update([\'state\' => 1])) {
2023-04-17 15:45:21 +08:00
return $this->response->json([\'code\' => 500, \'message\' => \'系统繁忙, 请稍后再试\']);
2022-09-21 11:44:43 +08:00
} else {
2023-04-17 15:45:21 +08:00
return $this->response->json([\'code\' => 0, \'message\' => \'ok\']);
2022-03-17 10:35:14 +08:00
}
}';
2023-10-08 22:16:32 +08:00
}
2022-03-17 10:35:14 +08:00
2022-09-21 11:44:43 +08:00
2023-10-08 22:16:32 +08:00
/**
* @param $fields
* @param $className
* @param null $object
* @param array $path
* @param string $tableName
* @return string
* 构建更新
*/
public function controllerMethodUpdate($fields, $className, $object = NULL, array $path = [], string $tableName = ''): string
{
$_path = str_replace(CONTROLLER_PATH, '', $path['path']);
$_path = lcfirst(rtrim($_path, '/')) . '/' . lcfirst($className);
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$_path = ltrim($_path, '/');
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
return '
2022-03-17 10:35:14 +08:00
/**
2023-04-17 16:05:52 +08:00
* @return ResponseInterface
2022-03-17 10:35:14 +08:00
* @throws Exception
*/
2023-10-08 22:16:32 +08:00
#[Post(\'' . $this->db->database . '/' . $tableName . '/update\')]
2023-10-07 20:33:15 +08:00
public function actionUpdate(): ResponseInterface
2022-03-17 10:35:14 +08:00
{
$model = ' . $className . '::findOne($this->request->post(\'id\', 0));
if (empty($model)) {
2023-04-17 15:45:21 +08:00
return $this->response->json([\'code\' => 500, \'message\' => SELECT_IS_NULL]);
2022-03-17 10:35:14 +08:00
}
2023-10-07 20:33:15 +08:00
$model->attributes = $this->request->all();
2022-03-17 10:35:14 +08:00
if (!$model->save()) {
2023-04-17 15:45:21 +08:00
return $this->response->json([\'code\' => 500, \'message\' => $model->getLastError()]);
2022-09-21 11:44:43 +08:00
} else {
2023-04-25 23:21:01 +08:00
return $this->response->json([\'code\' => 0, \'param\' => $model->toArray()]);
2022-03-17 10:35:14 +08:00
}
}';
2023-10-08 22:16:32 +08:00
}
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
/**
* @param $fields
* @param $className
* @param null $object
* @param array $path
* @param string $tableName
* @return string
* 构建更新
*/
public function controllerMethodBatchDelete($fields, $className, $object = NULL, array $path = [], string $tableName = ''): string
{
$_path = str_replace(CONTROLLER_PATH, '', $path['path']);
$_path = lcfirst(rtrim($_path, '/')) . '/' . lcfirst($className);
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$_path = ltrim($_path, '/');
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
return '
2022-03-17 10:35:14 +08:00
/**
2023-04-17 16:05:52 +08:00
* @return ResponseInterface
2022-03-17 10:35:14 +08:00
* @throws Exception
*/
2023-10-08 22:16:32 +08:00
#[Post(\'' . $this->db->database . '/' . $tableName . '/batch/delete\')]
2023-04-17 15:45:21 +08:00
public function actionBatchDelete(): ResponseInterface
2022-03-17 10:35:14 +08:00
{
2023-04-17 17:15:31 +08:00
$_key = $this->request->post(\'ids\', []);
2022-03-17 10:35:14 +08:00
if (empty($_key)) {
2023-04-17 15:45:21 +08:00
return $this->response->json([\'code\' => 500, \'message\' => PARAMS_IS_NULL]);
2022-03-17 10:35:14 +08:00
}
2022-03-17 10:57:02 +08:00
$model = ' . $className . '::query()->whereIn(\'id\', $_key);
2022-03-17 10:35:14 +08:00
if (!$model->delete()) {
2023-04-17 15:45:21 +08:00
return $this->response->json([\'code\' => 500, \'message\' => DB_ERROR_BUSY]);
} else {
2023-04-25 23:21:01 +08:00
return $this->response->json([\'code\' => 0, \'param\' => $_key]);
2022-03-17 10:35:14 +08:00
}
}';
2023-10-08 22:16:32 +08:00
}
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
/**
* @param $fields
* @param $className
* @param $managerName
* @param array $path
* @param string $tableName
* @return string
* 构建详情
*/
public function controllerMethodDetail($fields, $className, $managerName, array $path = [], string $tableName = ''): string
{
$_path = str_replace(CONTROLLER_PATH, '', $path['path']);
$_path = lcfirst(rtrim($_path, '/')) . '/' . lcfirst($className);
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$_path = ltrim($_path, '/');
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
return '
2022-03-17 10:35:14 +08:00
/**
2023-04-17 16:05:52 +08:00
* @return ResponseInterface
2022-03-17 10:35:14 +08:00
* @throws Exception
*/
2023-10-08 22:16:32 +08:00
#[Get(\'' . $this->db->database . '/' . $tableName . '/detail\')]
2023-04-17 15:45:21 +08:00
public function actionDetail(): ResponseInterface
2022-03-17 10:35:14 +08:00
{
$model = ' . $managerName . '::findOne($this->request->query(\'id\'));
if (empty($model)) {
2023-04-17 15:45:21 +08:00
return $this->response->json([\'code\' => 500, \'message\' => SELECT_IS_NULL]);
} else {
2023-04-25 23:21:01 +08:00
return $this->response->json([\'code\' => 0, \'param\' => $model->toArray()]);
2022-03-17 10:35:14 +08:00
}
}';
2023-10-08 22:16:32 +08:00
}
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
/**
* @param $fields
* @param $className
* @param $managerName
* @param $path
* @param string $tableName
* @return string
* 构建删除操作
*/
public function controllerMethodDelete($fields, $className, $managerName, $path, string $tableName = ''): string
{
$_path = str_replace(CONTROLLER_PATH, '', $path['path']);
$_path = lcfirst(rtrim($_path, '/')) . '/' . lcfirst($className);
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$_path = ltrim($_path, '/');
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
return '
2022-03-17 10:35:14 +08:00
/**
2023-04-17 16:05:52 +08:00
* @return ResponseInterface
2022-03-17 10:35:14 +08:00
* @throws Exception
*/
2023-10-08 22:16:32 +08:00
#[Post(\'' . $this->db->database . '/' . $tableName . '/delete\')]
2023-04-17 15:45:21 +08:00
public function actionDelete(): ResponseInterface
2022-03-17 10:35:14 +08:00
{
2023-04-17 17:15:31 +08:00
$_key = $this->request->post(\'id\', 0);
2022-03-17 10:35:14 +08:00
$model = ' . $managerName . '::findOne($_key);
if (empty($model)) {
2023-04-17 15:45:21 +08:00
return $this->response->json([\'code\' => 500, \'message\' => SELECT_IS_NULL]);
2022-03-17 10:35:14 +08:00
}
if (!$model->delete()) {
2023-04-17 15:45:21 +08:00
return $this->response->json([\'code\' => 500, \'message\' => $model->getLastError()]);
} else {
return $this->response->json([\'code\' => 0, \'message\' => \'ok\']);
2022-03-17 10:35:14 +08:00
}
}';
2023-10-08 22:16:32 +08:00
}
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
/**
* @param $fields
* @param $className
* @param $managerName
* @param array $path
* @param string $tableName
* @return string
* 构建查询列表
*/
public function controllerMethodList($fields, $className, $managerName, array $path = [], string $tableName = ''): string
{
$_path = str_replace(CONTROLLER_PATH, '', $path['path']);
$_path = lcfirst(rtrim($_path, '/')) . '/' . lcfirst($className);
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$_path = ltrim($_path, '/');
return '
2022-03-17 10:35:14 +08:00
/**
2023-04-17 16:05:52 +08:00
* @return ResponseInterface
2022-03-17 10:35:14 +08:00
* @throws Exception
*/
2023-10-08 22:16:32 +08:00
#[Get(\'' . $this->db->database . '/' . $tableName . '/list\')]
2023-04-17 15:45:21 +08:00
public function actionList(): ResponseInterface
2022-03-17 10:35:14 +08:00
{
//分页处理
$count = $this->request->query(\'count\', -1);
$order = $this->request->query(\'order\', \'id\');
if (!empty($order)) {
$order .= !$this->request->query(\'isDesc\', 0) ? \' asc\' : \' desc\';
} else {
$order = \'id desc\';
}
2022-09-05 15:28:41 +08:00
$pWhere = [];
2022-09-21 11:44:43 +08:00
' . $this->getWhere($fields) . '
2022-03-17 10:35:14 +08:00
//列表输出
2022-09-05 15:28:41 +08:00
$model = ' . $managerName . '::query()->where($pWhere)->orderBy($order);
2022-03-17 10:35:14 +08:00
$keyword = $this->request->query(\'keyword\', null);
if (!empty($keyword)) {
2022-03-17 10:57:02 +08:00
$model->whereLike(\'keyword\', $keyword);
2022-03-17 10:35:14 +08:00
}
if ((int) $count === 1) {
$count = $model->count();
}
2023-04-17 15:45:21 +08:00
[$offset, $size] = $this->getPageInfo();
2022-03-17 10:35:14 +08:00
if ($count != -100) {
2023-04-17 15:45:21 +08:00
$model->offset($offset)->limit($size);
2022-03-17 10:35:14 +08:00
}
2023-08-21 16:21:19 +08:00
$data = $model->get()->toArray();
2022-03-17 10:35:14 +08:00
2023-04-25 23:21:01 +08:00
return $this->response->json([\'code\' => 0, \'param\' => $data, \'count\' => $count]);
2022-03-17 10:35:14 +08:00
}
';
2023-10-08 22:16:32 +08:00
}
2022-03-17 10:35:14 +08:00
2023-04-17 15:45:21 +08:00
2023-10-08 22:16:32 +08:00
private function getData($path, $formClass, $fields): string
{
$html = '';
$length = $this->getMaxLength($fields);
$class = '';
$header = [];
$toArray = [];
foreach ($fields as $key => $val) {
if (str_starts_with($val['Type'], 'enum')) {
preg_match('/\(.*\)/', $val['Type'], $number);
$number[0] = trim($number[0], '()');
$values = explode(',', $number[0]);
$number[1] = 0;
foreach ($values as $evalue) {
$evalue = trim($evalue, '\'');
$leng = mb_strlen($evalue);
if ($number[1] < $leng) {
$number[1] = $leng;
}
}
$type = strtolower(preg_replace('/\(\'\w+\'(,\'\w+\')*\)/', '', $val['Type']));
$first = preg_replace('/\s+\w+/', '', $type);
} else {
preg_match('/\((\d+)(,(\d+))*\)/', $val['Type'], $number);
$type = strtolower(preg_replace('/\(\d+(,\d+)*\)/', '', $val['Type']));
$first = preg_replace('/\s+\w+/', '', $type);
}
if ($val['Extra'] == 'auto_increment') continue;
if ($type == 'timestamp') continue;
$_field = [];
$_field['required'] = $this->checkIsRequired($val);
foreach ($this->type as $_key => $value) {
if (!in_array(strtolower($first), $value)) continue;
$comment = $val['Comment'];
$_field['type'] = $_key;
$toArray[] = '
2023-04-17 15:45:21 +08:00
\'' . str_pad($val['Field'] . '\'', $length, ' ', STR_PAD_RIGHT) . ' => $this->' . $val['Field'] . ',';
2023-10-08 22:16:32 +08:00
if ($type == 'date' || $type == 'datetime' || $type == 'time') {
if (!in_array('use Kiri\Router\Validator\Inject\Length;', $header)) {
$header[] = 'use Kiri\Router\Validator\Inject\Length;';
}
$class .= match ($type) {
'date' => '
2023-04-17 15:45:21 +08:00
/**
* ' . (empty($comment) ? '这批懒的很,没写注释' : $comment) . '
*/
#[Length(10)]
2023-10-07 20:33:15 +08:00
public string $' . $val['Field'] . ' = \'1960-06-01\';
2023-04-17 15:45:21 +08:00
',
2023-10-08 22:16:32 +08:00
'time' => '
2023-04-17 15:45:21 +08:00
/**
* ' . (empty($comment) ? '这批懒的很,没写注释' : $comment) . '
*/
#[Length(5)]
2023-10-07 20:33:15 +08:00
public string $' . $val['Field'] . ' = \'00:00\';
2023-04-17 15:45:21 +08:00
',
2023-10-08 22:16:32 +08:00
default => '
2023-04-17 15:45:21 +08:00
/**
* ' . (empty($comment) ? '这批懒的很,没写注释' : $comment) . '
*/
#[Length(16)]
2023-10-07 20:33:15 +08:00
public string $' . $val['Field'] . ' = \'\';
2023-04-17 15:45:21 +08:00
',
2023-10-08 22:16:32 +08:00
};
} else if ($type == 'json' || $type == 'text' || $type == 'longtext') {
$class .= '
2023-04-17 16:39:17 +08:00
/**
* ' . (empty($comment) ? '这批懒的很,没写注释' : $comment) . '
*/
2023-10-07 20:33:15 +08:00
public string $' . $val['Field'] . ' = \'\';
2023-04-17 16:39:17 +08:00
';
2023-10-08 22:16:32 +08:00
} else {
if (isset($number[0])) {
if (strpos(',', $number[0])) {
$_field['min'] = $number[1];
$_field['max'] = $number[3];
} else {
$_field['min'] = 0;
$_field['max'] = $number[1];
}
}
if ($type == 'enum' && !in_array('use Kiri\Router\Validator\Inject\In;', $header)) {
$header[] = 'use Kiri\Router\Validator\Inject\In;';
}
if ($_field['required'] == 'true' && !in_array('use Kiri\Router\Validator\Inject\Required;', $header)) {
$header[] = 'use Kiri\Router\Validator\Inject\Required;';
}
if (!in_array('use Kiri\Router\Validator\Inject\MaxLength;', $header)) {
$header[] = 'use Kiri\Router\Validator\Inject\MaxLength;';
}
$class .= '
2023-04-17 15:45:21 +08:00
/**
* ' . (empty($comment) ? '这批懒的很,没写注释' : $comment) . '
*/' . ($type == 'enum' ? '
2023-10-07 20:33:15 +08:00
#[In([' . $number[0] . '])]' : '') . ($_field['required'] == 'true' ? '
2023-04-17 15:45:21 +08:00
#[Required]' : '') . '
2023-04-17 16:31:03 +08:00
#[MaxLength(' . ($number[1] ?? 0) . ')]
2023-10-08 22:16:32 +08:00
public ' . $_key . ' $' . $val['Field'] . ' = ' . (match ($type) {
'tinyint', 'smallint', 'mediumint', 'int', 'bigint', 'float', 'double', 'decimal', 'timestamp', 'year' => 0,
'bool', 'boolean' => false,
default => '\'\'',
}) . ';
2023-04-17 15:45:21 +08:00
';
2023-10-08 22:16:32 +08:00
}
}
$this->rules[$val['Field']] = $_field;
}
2023-04-17 18:56:16 +08:00
2023-10-08 22:16:32 +08:00
$namespace = str_replace('Controller', 'Form', $path['namespace']);
$path = str_replace('Controller', 'Form', $path['path']);
if (!is_dir($_SERVER['PWD'] . '/app/Form/')) {
mkdir($_SERVER['PWD'] . '/app/Form/');
}
if (!is_dir($path)) {
mkdir($path);
}
if (!file_exists($path . '/' . $formClass . 'Form.php')) {
touch($path . '/' . $formClass . 'Form.php');
}
file_put_contents($path . '/' . $formClass . 'Form.php', '<?php
2023-04-17 15:45:21 +08:00
2023-04-17 19:01:24 +08:00
namespace ' . $namespace . ';
2023-04-17 15:45:21 +08:00
use Kiri\ToArray;
' . implode(PHP_EOL, $header) . PHP_EOL . PHP_EOL . '
/**
* FormData
*/
class ' . $formClass . 'Form implements ToArray, \JsonSerializable, \Stringable
{
' . $class . '
/**
* @return bool|string
*/
public function jsonSerialize(): bool|string
{
// TODO: Implement jsonSerialize() method.
return json_encode($this->toArray(), JSON_UNESCAPED_UNICODE);
}
/**
* @return string
*/
public function __toString(): string
{
// TODO: Implement __toString() method.
$json = $this->jsonSerialize();
if (!$json) {
return \'\';
}
return $json;
}
/**
* @return array
*/
public function toArray(): array
{
return [' . implode($toArray) . '
];
}
}');
2023-10-08 22:16:32 +08:00
return $html;
}
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
/**
* @param $fields
* @return int
*/
private function getMaxLength($fields): int
{
$length = 0;
foreach ($fields as $key => $val) {
if (mb_strlen($val['Field'] . ' >=') > $length) $length = mb_strlen($val['Field'] . ' >=');
}
return $length;
}
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
/**
* @param $fields
* @return string
*/
private function getWhere($fields): string
{
$html = '';
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$length = $this->getMaxLength($fields);
foreach ($fields as $key => $val) {
preg_match('/\d+/', $val['Type'], $number);
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$type = strtolower(preg_replace('/\(\d+\)/', '', $val['Type']));
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$first = preg_replace('/\s+\w+/', '', $type);
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
if ($type == 'timestamp') continue;
if ($type == 'json') continue;
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
foreach ($this->type as $_key => $value) {
if (!in_array(strtolower($first), $value)) continue;
$comment = '//' . $val['Comment'];
if ($type == 'date' || $type == 'datetime' || $type == 'time') {
$_tps = '$this->request->query(\'' . $val['Field'] . '\', null)';
$html .= '
2022-03-17 10:35:14 +08:00
$pWhere[\'' . str_pad($val['Field'] . ' <=\']', $length, ' ', STR_PAD_RIGHT) . ' = ' . str_pad($_tps . ';', 60, ' ', STR_PAD_RIGHT) . $comment;
2023-10-08 22:16:32 +08:00
$html .= '
2022-03-17 10:35:14 +08:00
$pWhere[\'' . str_pad($val['Field'] . ' >=\']', $length, ' ', STR_PAD_RIGHT) . ' = ' . str_pad($_tps . ';', 60, ' ', STR_PAD_RIGHT) . $comment;
2023-10-08 22:16:32 +08:00
} else {
2022-03-17 10:35:14 +08:00
2023-10-08 22:16:32 +08:00
$_tps = '$this->request->query(\'' . $val['Field'] . '\', null)';
$html .= '
2022-03-17 10:35:14 +08:00
$pWhere[\'' . str_pad($val['Field'] . '\']', $length, ' ', STR_PAD_RIGHT) . ' = ' . str_pad($_tps . ';', 60, ' ', STR_PAD_RIGHT) . $comment;
2023-10-08 22:16:32 +08:00
}
}
}
return $html;
}
2022-03-17 10:35:14 +08:00
}