예제 #1
0
 public function generateModel(SdlTag $tag, $namespace = "Models")
 {
     $model = $tag->modelname ? $tag->modelname : ucwords($tag[0]) . 'Model';
     $cols = $tag->query("column");
     $php = "<?php\n\n";
     $php .= "namespace {$namespace};\n\n";
     $php .= "use \\Cherry\\Data\\Model;\n\n";
     $php .= "/** \n";
     $php .= " * @brief Database model.\n";
     $php .= " * \n";
     $php .= " * @generator app-setup 1.0\n";
     $php .= " */\n";
     $php .= "class {$model} extends Model {\n";
     $php .= "\n";
     $php .= "    /// @var Table name\n";
     $php .= "    public \$table = \"{$tag[0]}\";\n";
     $php .= "\n";
     $php .= "    /// @var Columns and types\n";
     $php .= "    public \$columns = [\n";
     foreach ($cols as $column) {
         $def = $column->type;
         $php .= "        \"{$column[0]}\" => \"{$def}\"" . (end($cols) != $column ? ",\n" : "\n");
     }
     $php .= "    ];\n";
     $primary = $tag->auto;
     $php .= "\n";
     $php .= "    /// @var Primary index column\n";
     if ($primary) {
         $php .= "    public \$primary = \"{$primary}\";\n";
     } else {
         $php .= "    public \$primary = null;\n";
     }
     $php .= "\n";
     $php .= "    /** \n";
     $php .= "     * Static invoker.\n";
     $php .= "     * \n";
     $php .= "     * @param Mixed \$m Method name\n";
     $php .= "     * @param Array \$a Method arguments\n";
     $php .= "     * \n";
     $php .= "     */\n";
     $php .= "    public static function __callStatic(\$m,\$a) {\n";
     $php .= "        return (new self())->call(\$m,\$a);\n";
     $php .= "    }\n";
     $php .= "\n";
     $php .= "    /** \n";
     $php .= "     * Definitions for the model. Is called when the model is set up.\n";
     $php .= "     */\n";
     $php .= "    public function define() {\n";
     $php .= "        // \$this->setValidator(\"column\", new ValidatorClass());\n";
     $php .= "    }\n";
     $php .= "}\n";
     return $php;
 }
예제 #2
0
 public function __construct()
 {
     $cfg = PathResolver::getInstance()->getPath("{APP}/config/routes.sdl");
     if (!file_exists($cfg) || !is_readable($cfg)) {
         \debug("Could not read routelist from {$cfg}.");
     } else {
         $root = new SdlTag();
         $root->loadFile($cfg);
         $this->routes = $root->query("/routes/route");
         $num = count($this->routes);
         \debug("Parsed {$num} routes from {$cfg}");
     }
 }
예제 #3
0
 protected function getSqlVartype(SdlTag $tag)
 {
     $type = $tag->type;
     if (strpos($type, ":") !== false) {
         list($type, $len) = explode(":", $type);
     } else {
         $len = null;
     }
     switch (strtolower($type)) {
         case 'text':
             if (!$len) {
                 $len = 65535;
             }
         case 'char':
             if ($len == null) {
                 $len = 250;
             }
             if ($len < 1024) {
                 $type = "TEXT({$len})";
             } elseif ($len < 65535) {
                 $type = "TEXT";
             } else {
                 $type = "TEXT";
             }
             break;
         case 'blob':
         case 'binary':
             $type = "BLOB";
             break;
         case 'bool':
             $type = "INTEGER";
             break;
         case 'int':
         case 'integer':
             if (!$len) {
                 $len = 11;
             }
             $type = "INTEGER";
             $type .= "({$len})";
             break;
         case 'float':
             $type = "REAL";
             if ($len) {
                 $type .= "({$len})";
             }
             break;
         case 'double':
             $type = "REAL";
             if ($len) {
                 $type .= "({$len})";
             }
             break;
         case 'date':
             $type = "TEXT";
             break;
         case 'set':
             $values = [];
             foreach ($tag->query("value") as $value) {
                 $values[] = $value[0];
             }
             $type = "TEXT";
         case 'enum':
             $values = [];
             foreach ($tag->query("value") as $value) {
                 $values[] = $value[0];
             }
             $type = "TEXT";
     }
     return $type;
 }
예제 #4
0
 protected function getSqlVartype(SdlTag $tag)
 {
     $type = $tag->type;
     if (strpos($type, ":") !== false) {
         list($type, $len) = explode(":", $type);
     } else {
         $len = null;
     }
     switch (strtolower($type)) {
         case 'text':
             if (!$len) {
                 $len = 65535;
             }
         case 'char':
             if ($len == null) {
                 $len = 250;
             }
             if ($len < 1024) {
                 $type = "VARCHAR({$len})";
             } elseif ($len < 65535) {
                 $type = "TEXT";
             } else {
                 $type = "MEDIUMTEXT";
             }
             break;
         case 'blob':
             if (!$len) {
                 $len = 65535;
             }
         case 'binary':
             if ($len == null) {
                 $len = 250;
             }
             if ($len < 1024) {
                 $type = "VARBINARY({$len})";
             } elseif ($len < 65535) {
                 $type = "BLOB";
             } else {
                 $type = "MEDIUMBLOB";
             }
             break;
         case 'bool':
             $type = "TINYINT(1)";
             break;
         case 'int':
         case 'integer':
             if (!$len) {
                 $len = 11;
             }
             $type = "INT";
             $type .= "({$len})";
             break;
         case 'float':
             $type = "FLOAT";
             if ($len) {
                 $type .= "({$len})";
             }
             break;
         case 'double':
             $type = "FLOAT";
             if ($len) {
                 $type .= "({$len})";
             }
             break;
         case 'date':
             $type = "DATETIME";
             break;
         case 'set':
             $values = [];
             foreach ($tag->query("value") as $value) {
                 $values[] = $value[0];
             }
             $type = "SET('" . join("','", $values) . "')";
         case 'enum':
             $values = [];
             foreach ($tag->query("value") as $value) {
                 $values[] = $value[0];
             }
             $type = "ENUM('" . join("','", $values) . "')";
     }
     return $type;
 }