Beispiel #1
0
 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;
     }
 }
Beispiel #2
0
 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);
 }