public static function parseClass($path) { $code = file_get_contents($path); $parser = new PhpParser\Parser(new PhpParser\Lexer\Emulative()); try { $stmts = $parser->parse($code); $class = new CodeGenerator\ClassGenerator(); $class->name = $stmts[0]->name; $class->extends = implode(',', $stmts[0]->extends->parts); foreach ($stmts[0]->stmts as $stmt) { if (get_class($stmt) == 'PhpParser\\Node\\Stmt\\ClassMethod') { $class->addMethod($stmt->name); } } return $class; // $stmts is an array of statement nodes } catch (PhpParser\Error $e) { echo 'Parse Error: ', $e->getMessage(); exit; } }
public function generateModel($module, $name, $codeName, $options) { $codeName = ucfirst($codeName); $class = new CodeGenerator\ClassGenerator(); $class->name = $codeName; $class->extends = '\\Model'; $modelCols = $this->parseColsForModel(); if (!empty($options['cols'])) { $modelCols = $this->parseColsForModel($options['cols']); $tableName = strtolower($module) . '_' . strtolower($codeName); $tableCols = $this->parseColsForTable($options['cols'], strtolower($codeName) . '_', $tableName); if (App::$cur->db->tableExist($tableName)) { foreach ($tableCols as $colKey => $params) { App::$cur->db->add_col($tableName, $colKey, $params); } } else { App::$cur->db->createTable($tableName, $tableCols); } } $class->addProperty('objectName', $name, true); $class->addProperty('cols', $modelCols['cols'], true); $class->addProperty('labels', $modelCols['labels'], true); $class->addMethod('relations', 'return ' . CodeGenerator::genArray($modelCols['relations']), [], true); $modelCode = "<?php \n\nnamespace {$module};\n\n" . $class->generate(); $modulePath = Module::getModulePath($module); Tools::createDir($modulePath . '/models'); file_put_contents($modulePath . '/models/' . $codeName . '.php', $modelCode); $config = Config::custom($modulePath . '/generatorHash.php'); $config['models/' . $codeName . '.php'] = md5($modelCode); Config::save($modulePath . '/generatorHash.php', $config); }